Esempio n. 1
0
 /// <inheritdoc/>
 public BatchReceiveMessageResponse BatchReceiveMessage(BatchReceiveMessageRequest request)
 {
     return(AggregateExceptionExtract.Extract(() =>
     {
         return BatchReceiveMessageAsync(request).Result;
     }));
 }
Esempio n. 2
0
        public async Task <BatchReceiveMessageResponse> BatchReceiveMessageAsync(BatchReceiveMessageRequest request)
        {
            request.QueueName = this.QueueName;

            var marshaller   = new BatchReceiveMessageRequestMarshaller();
            var unmarshaller = BatchReceiveMessageResponseUnmarshaller.Instance;

            return(await _serviceClient.InvokeAsync <BatchReceiveMessageRequest, BatchReceiveMessageResponse>(request, marshaller, unmarshaller).ConfigureAwait(false));
        }
Esempio n. 3
0
        /// <inheritdoc/>
        public BatchReceiveMessageResponse BatchReceiveMessage(BatchReceiveMessageRequest request)
        {
            request.QueueName = this.QueueName;

            var marshaller   = new BatchReceiveMessageRequestMarshaller();
            var unmarshaller = BatchReceiveMessageResponseUnmarshaller.Instance;

            return(_serviceClient.Invoke <BatchReceiveMessageRequest, BatchReceiveMessageResponse>(request, marshaller, unmarshaller));
        }
Esempio n. 4
0
        /// <inheritdoc/>
        public IAsyncResult BeginBatchReceiveMessage(BatchReceiveMessageRequest request, AsyncCallback callback, object state)
        {
            request.QueueName = this.QueueName;

            var marshaller   = new BatchReceiveMessageRequestMarshaller();
            var unmarshaller = BatchReceiveMessageResponseUnmarshaller.Instance;

            return(_serviceClient.BeginInvoke <BatchReceiveMessageRequest>(request, marshaller, unmarshaller,
                                                                           callback, state));
        }
Esempio n. 5
0
        public ICollection <T> BatchReceive(uint batchSize, uint?waitSeconds = null, bool deleteMessageAfterReceive = true)
        {
            if (16 < batchSize)
            {
                throw new System.ArgumentOutOfRangeException("batchSize", "batchSize最大为16");
            }

            var list = new List <T>();

            var request = new BatchReceiveMessageRequest(batchSize);

            if (waitSeconds.HasValue)
            {
                request.WaitSeconds = waitSeconds.Value;
            }

            var queue = GetQueue();
            BatchReceiveMessageResponse response = null;

            try
            {
                response = queue.BatchReceiveMessage(request);
            }
            catch (MessageNotExistException) { }

            if (null != response &&
                0 < response.Messages.Count)
            {
                // 处理数据
                list = response.Messages.Select(x => Deserialize(x.Body)).ToList();

                // 获取完信息后删除信息
                if (deleteMessageAfterReceive)
                {
                    var receiptHandles = response.Messages.Select(x => x.ReceiptHandle).ToList();
                    var deleteRequest  = new BatchDeleteMessageRequest
                    {
                        ReceiptHandles = receiptHandles
                    };
                    queue.BatchDeleteMessage(deleteRequest);
                }
            }

            return(list);
        }
Esempio n. 6
0
        public async Task <BatchReceiveMessageResponse> BatchReceiveMessageAsync(uint batchSize, uint waitSeconds)
        {
            var request = new BatchReceiveMessageRequest(batchSize, waitSeconds);

            return(await BatchReceiveMessageAsync(request).ConfigureAwait(false));
        }
Esempio n. 7
0
        public void Start()
        {
            #region Queue Releated Test Cases

            /* 1.1. Async create queue */
            var createQueueRequest = new CreateQueueRequest
            {
                QueueName  = _queueName,
                Attributes =
                {
                    DelaySeconds           =     10,
                    VisibilityTimeout      =     30,
                    MaximumMessageSize     =  40960,
                    MessageRetentionPeriod = 345600,
                    PollingWaitSeconds     = 15
                }
            };

            try
            {
                _client.BeginCreateQueue(createQueueRequest, CreateQueueCallback, null);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Create queue failed, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            /* 2.1 Async get queue attributes */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                var getQueueAttributesRequest = new GetQueueAttributesRequest();
                nativeQueue.BeginGetAttributes(getQueueAttributesRequest, GetQueueAttributesCallback, nativeQueue);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Get queue attributes failed, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            /* 3. Async list queue */
            try
            {
                do
                {
                    var listQueueRequest = new ListQueueRequest
                    {
                        QueueNamePrefix = _queueNamePrefix,
                        Marker          = _nextMarker,
                        MaxReturns      = 5
                    };

                    _client.BeginListQueue(listQueueRequest, ListQueueCallback, null);

                    _autoSetEvent.WaitOne();
                } while (_nextMarker != string.Empty);
            }
            catch (Exception ex)
            {
                Console.WriteLine("List queue failed, exception info: " + ex.Message);
            }

            /* 4. Async set queue attributes */
            var setQueueAttributesRequest = new SetQueueAttributesRequest
            {
                Attributes =
                {
                    DelaySeconds           =     0,
                    VisibilityTimeout      =    10,
                    MaximumMessageSize     = 10240,
                    PollingWaitSeconds     =    10,
                    MessageRetentionPeriod = 50000
                }
            };
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                nativeQueue.BeginSetAttributes(setQueueAttributesRequest, SetQueueAttributesCallback, nativeQueue);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Set queue attributes failed, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            /* 2.2 Async get queue attributes again */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                var getQueueAttributesRequest = new GetQueueAttributesRequest();
                nativeQueue.BeginGetAttributes(getQueueAttributesRequest, GetQueueAttributesCallback, nativeQueue);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Get queue attributes failed again, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            /* 5.1. Async delete queue */
            var deleteQueueRequest = new DeleteQueueRequest(_queueName);
            deleteQueueRequest.AddHeader("Accept", "IE6");
            try
            {
                _client.BeginDeleteQueue(deleteQueueRequest, DeleteQueueCallback, _queueName);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Delete queue failed, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            /* 1.2. Async create queue again */
            try
            {
                _client.BeginCreateQueue(createQueueRequest, CreateQueueCallback, null);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Create queue failed again, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            #endregion

            #region Messge Releated Test Cases

            /* 5. Async receive message */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                for (int i = 0; i < _receiveTimes; i++)
                {
                    var receiveMessageRequest = new ReceiveMessageRequest();
                    nativeQueue.BeginReceiveMessage(receiveMessageRequest, ReceiveMessageCallback, nativeQueue);

                    _autoSetEvent.WaitOne();

                    Thread.Sleep(_receiveInterval);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Receive message failed, exception info: " + ex.Message);
            }

            /* 6. Async send message */
            try
            {
                var nativeQueue        = _client.GetNativeQueue(_queueName);
                var sendMessageRequest = new SendMessageRequest("阿里云计算");
                nativeQueue.BeginSendMessage(sendMessageRequest, SendMessageCallback, nativeQueue);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Send message failed, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            /* 7. Async receive message */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                for (int i = 0; i < _receiveTimes; i++)
                {
                    var receiveMessageRequest = new ReceiveMessageRequest();
                    nativeQueue.BeginReceiveMessage(receiveMessageRequest, ReceiveMessageCallback, nativeQueue);

                    _autoSetEvent.WaitOne();

                    Thread.Sleep(_receiveInterval);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Receive message failed, exception info: " + ex.Message);
            }

            /* 8. Async change message visibility */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                var changeMessageVisibilityRequest = new ChangeMessageVisibilityRequest
                {
                    ReceiptHandle     = _receiptHandle,
                    VisibilityTimeout = 5
                };
                nativeQueue.BeginChangeMessageVisibility(changeMessageVisibilityRequest, ChangeMessageVisibilityCallback, nativeQueue);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Change message visibility failed, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            /* 9. Async peek message */
            try
            {
                var nativeQueue        = _client.GetNativeQueue(_queueName);
                var peekMessageRequest = new PeekMessageRequest();
                for (uint i = 0; i < _receiveTimes; i++)
                {
                    nativeQueue.BeginPeekMessage(peekMessageRequest, PeekMessageCallback, nativeQueue);

                    _autoSetEvent.WaitOne();

                    Thread.Sleep(_receiveInterval);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Peek message failed, exception info: " + ex.Message);
            }

            /* 10. Async delete message */
            try
            {
                var nativeQueue            = _client.GetNativeQueue(_queueName);
                var receiveMessageResponse = nativeQueue.ReceiveMessage();
                _receiptHandle = receiveMessageResponse.Message.ReceiptHandle;
                var deleteMessageRequest = new DeleteMessageRequest(_receiptHandle);
                nativeQueue.BeginDeleteMessage(deleteMessageRequest, DeleteMessageCallback, nativeQueue);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Async BeginDeleteMessage failed, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            /* 11. Async batch send message */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                List <SendMessageRequest> requests = new List <SendMessageRequest>();
                requests.Add(new SendMessageRequest("阿里云计算 Priority1", 0, 1));
                for (int i = 0; i < _batchSize; i++)
                {
                    requests.Add(new SendMessageRequest("阿里云计算" + i.ToString()));
                }
                BatchSendMessageRequest batchSendRequest = new BatchSendMessageRequest()
                {
                    Requests = requests
                };
                nativeQueue.BeginBatchSendMessage(batchSendRequest, BatchSendMessageCallback, nativeQueue);

                _autoSetEvent.WaitOne();
            }
            catch (Exception ex)
            {
                Console.WriteLine("BeginBatchSend message failed, exception info: " + ex.Message);
            }

            Thread.Sleep(12000);

            /* 12. Async batch peek message */
            try
            {
                var nativeQueue             = _client.GetNativeQueue(_queueName);
                var batchPeekMessageRequest = new BatchPeekMessageRequest(_batchSize + 2);
                Console.WriteLine(batchPeekMessageRequest.BatchSize.ToString());
                nativeQueue.BeginBatchPeekMessage(batchPeekMessageRequest, BatchPeekMessageCallback, nativeQueue);

                _autoSetEvent.WaitOne();
            }
            catch (Exception ex)
            {
                Console.WriteLine("BeginBatchPeek message failed, exception info: " + ex.Message);
            }

            /* 13. Async batch receive message */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                BatchReceiveMessageRequest batchReceiveMessageRequest = new BatchReceiveMessageRequest(_batchSize + 1, 3);
                var batchReceiveMessageResponse = nativeQueue.BeginBatchReceiveMessage(batchReceiveMessageRequest, BatchReceiveMessageCallback, nativeQueue);
                _autoSetEvent.WaitOne();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Batch receive message failed, exception info: " + ex.Message);
            }

            /* 14. Async batch delete message */
            if (_batchReceiveMessageResponse != null && _batchReceiveMessageResponse.Messages.Count > 0)
            {
                try
                {
                    var           nativeQueue    = _client.GetNativeQueue(_queueName);
                    List <string> receiptHandles = new List <string>();
                    foreach (var message in _batchReceiveMessageResponse.Messages)
                    {
                        receiptHandles.Add(message.ReceiptHandle);
                    }
                    var batchDeleteMessageRequest = new BatchDeleteMessageRequest()
                    {
                        ReceiptHandles = receiptHandles
                    };
                    var batchDeleteMessageResponse = nativeQueue.BeginBatchDeleteMessage(batchDeleteMessageRequest, BatchDeleteMessageCallback, nativeQueue);
                    _autoSetEvent.WaitOne();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Batch delete message failed, exception info: " + ex.Message);
                }
            }

            #endregion

            #region Clean Generated Queue

            /* 5.2. Async delete queue again */
            try
            {
                _client.BeginDeleteQueue(deleteQueueRequest, DeleteQueueCallback, _queueName);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Delete queue failed again, exception info: " + ex.Message);
            }

            _autoSetEvent.WaitOne();

            #endregion

            Console.ReadKey();
        }
Esempio n. 8
0
        /// <inheritdoc/>
        public BatchReceiveMessageResponse BatchReceiveMessage(uint batchSize, uint waitSeconds)
        {
            var request = new BatchReceiveMessageRequest(batchSize, waitSeconds);

            return(BatchReceiveMessage(request));
        }
Esempio n. 9
0
        /// <inheritdoc/>
        public BatchReceiveMessageResponse BatchReceiveMessage(uint batchSize)
        {
            var request = new BatchReceiveMessageRequest(batchSize);

            return(BatchReceiveMessage(request));
        }
        static void Main(string[] args)
        {
            var config = Newtonsoft.Json.JsonConvert.DeserializeObject <ConfigModel>(File.ReadAllText(@"E:\MNS.json"));

            _accessKeyId     = config.AccessKeyId;
            _secretAccessKey = config.AccessKey;
            _endpoint        = config.EndPoint;
            IMNS _client = new MNSClient(_accessKeyId, _secretAccessKey, _endpoint);

            #region Queue Releated Test Cases

            /* 1.1. Async create queue */
            var createQueueRequest = new CreateQueueRequest
            {
                QueueName  = _queueName,
                Attributes =
                {
                    DelaySeconds           =     10,
                    VisibilityTimeout      =     30,
                    MaximumMessageSize     =  40960,
                    MessageRetentionPeriod = 345600,
                    PollingWaitSeconds     = 15
                }
            };

            try
            {
                var queue = _client.CreateQueueAsync(createQueueRequest).Result;
                Console.WriteLine("Async Create queue successfully, queue name: {0}", queue.QueueName);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Create queue failed, exception info: " + ex.Message);
            }


            /* 2.1 Async get queue attributes */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                var getQueueAttributesRequest = new GetQueueAttributesRequest();

                var getQueueAttributesResponse = nativeQueue.GetAttributesAsync(getQueueAttributesRequest).Result;

                Console.WriteLine("Async Get queue attributes successfully, status code: {0}", getQueueAttributesResponse.HttpStatusCode);
                Console.WriteLine("----------------------------------------------------");
                Console.WriteLine("QueueName: {0}", getQueueAttributesResponse.Attributes.QueueName);
                Console.WriteLine("CreateTime: {0}", getQueueAttributesResponse.Attributes.CreateTime);
                Console.WriteLine("LastModifyTime: {0}", getQueueAttributesResponse.Attributes.LastModifyTime);
                Console.WriteLine("VisibilityTimeout: {0}", getQueueAttributesResponse.Attributes.VisibilityTimeout);
                Console.WriteLine("MaximumMessageSize: {0}", getQueueAttributesResponse.Attributes.MaximumMessageSize);
                Console.WriteLine("MessageRetentionPeriod: {0}", getQueueAttributesResponse.Attributes.MessageRetentionPeriod);
                Console.WriteLine("DelaySeconds: {0}", getQueueAttributesResponse.Attributes.DelaySeconds);
                Console.WriteLine("PollingWaitSeconds: {0}", getQueueAttributesResponse.Attributes.PollingWaitSeconds);
                Console.WriteLine("InactiveMessages: {0}", getQueueAttributesResponse.Attributes.InactiveMessages);
                Console.WriteLine("ActiveMessages: {0}", getQueueAttributesResponse.Attributes.ActiveMessages);
                Console.WriteLine("DelayMessages: {0}", getQueueAttributesResponse.Attributes.DelayMessages);
                Console.WriteLine("----------------------------------------------------\n");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Get queue attributes failed, exception info: " + ex.Message);
            }


            /* 3. Async list queue */
            try
            {
                do
                {
                    var listQueueRequest = new ListQueueRequest
                    {
                        QueueNamePrefix = _queueNamePrefix,
                        Marker          = _nextMarker,
                        MaxReturns      = 5
                    };

                    var response = _client.ListQueueAsync(listQueueRequest).Result;

                    foreach (var queueUrl in response.QueueUrls)
                    {
                        Console.WriteLine(queueUrl);
                    }

                    Console.WriteLine("\n----------------------------------------------------\n");

                    if (response.IsSetNextMarker())
                    {
                        _nextMarker = response.NextMarker;
                        Console.WriteLine("NextMarker: {0}", response.NextMarker);
                    }
                    else
                    {
                        _nextMarker = string.Empty;
                    }
                } while (_nextMarker != string.Empty);
            }
            catch (Exception ex)
            {
                Console.WriteLine("List queue failed, exception info: " + ex.Message);
            }

            /* 4. Async set queue attributes */
            var setQueueAttributesRequest = new SetQueueAttributesRequest
            {
                Attributes =
                {
                    DelaySeconds           =     0,
                    VisibilityTimeout      =    10,
                    MaximumMessageSize     = 10240,
                    PollingWaitSeconds     =    10,
                    MessageRetentionPeriod = 50000
                }
            };
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);;
                var setQueueAttributesResponse = nativeQueue.SetAttributesAsync(setQueueAttributesRequest).Result;

                Console.WriteLine("Async Set queue attributes successfully, status code: {0}", setQueueAttributesResponse.HttpStatusCode);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Set queue attributes failed, exception info: " + ex.Message);
            }


            /* 2.2 Async get queue attributes again */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                var getQueueAttributesRequest  = new GetQueueAttributesRequest();
                var getQueueAttributesResponse = nativeQueue.GetAttributesAsync(getQueueAttributesRequest).Result;

                Console.WriteLine("Async Get queue attributes successfully, status code: {0}", getQueueAttributesResponse.HttpStatusCode);
                Console.WriteLine("----------------------------------------------------");
                Console.WriteLine("QueueName: {0}", getQueueAttributesResponse.Attributes.QueueName);
                Console.WriteLine("CreateTime: {0}", getQueueAttributesResponse.Attributes.CreateTime);
                Console.WriteLine("LastModifyTime: {0}", getQueueAttributesResponse.Attributes.LastModifyTime);
                Console.WriteLine("VisibilityTimeout: {0}", getQueueAttributesResponse.Attributes.VisibilityTimeout);
                Console.WriteLine("MaximumMessageSize: {0}", getQueueAttributesResponse.Attributes.MaximumMessageSize);
                Console.WriteLine("MessageRetentionPeriod: {0}", getQueueAttributesResponse.Attributes.MessageRetentionPeriod);
                Console.WriteLine("DelaySeconds: {0}", getQueueAttributesResponse.Attributes.DelaySeconds);
                Console.WriteLine("PollingWaitSeconds: {0}", getQueueAttributesResponse.Attributes.PollingWaitSeconds);
                Console.WriteLine("InactiveMessages: {0}", getQueueAttributesResponse.Attributes.InactiveMessages);
                Console.WriteLine("ActiveMessages: {0}", getQueueAttributesResponse.Attributes.ActiveMessages);
                Console.WriteLine("DelayMessages: {0}", getQueueAttributesResponse.Attributes.DelayMessages);
                Console.WriteLine("----------------------------------------------------\n");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Get queue attributes failed again, exception info: " + ex.Message);
            }


            /* 5.1. Async delete queue */
            var deleteQueueRequest = new DeleteQueueRequest(_queueName);
            deleteQueueRequest.AddHeader("Accept", "IE6");
            try
            {
                var response = _client.DeleteQueueAsync(deleteQueueRequest).Result;

                Console.WriteLine("Async Delete queue {0} successfully, status code: {1}", _queueName, response.HttpStatusCode);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Delete queue failed, exception info: " + ex.Message);
            }


            /* 1.2. Async create queue again */
            try
            {
                var queue = _client.CreateQueueAsync(createQueueRequest).Result;

                Console.WriteLine("Async Create queue successfully, queue name: {0}", queue.QueueName);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Create queue failed again, exception info: " + ex.Message);
            }


            #endregion

            #region Messge Releated Test Cases

            /* 5. Async receive message */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                for (int i = 0; i < _receiveTimes; i++)
                {
                    var receiveMessageRequest = new ReceiveMessageRequest();
                    var response = nativeQueue.ReceiveMessageAsync(receiveMessageRequest).Result;
                    Console.WriteLine("Async Receive message successfully, status code: {0}", response.HttpStatusCode);
                    Console.WriteLine("----------------------------------------------------");
                    var message = response.Message;
                    Console.WriteLine("MessageId: {0}", message.Id);
                    Console.WriteLine("ReceiptHandle: {0}", message.ReceiptHandle);
                    Console.WriteLine("MessageBody: {0}", message.Body);
                    Console.WriteLine("MessageBodyMD5: {0}", message.BodyMD5);
                    Console.WriteLine("EnqueueTime: {0}", message.EnqueueTime);
                    Console.WriteLine("NextVisibleTime: {0}", message.NextVisibleTime);
                    Console.WriteLine("FirstDequeueTime: {0}", message.FirstDequeueTime);
                    Console.WriteLine("DequeueCount: {0}", message.DequeueCount);
                    Console.WriteLine("Priority: {0}", message.Priority);
                    Console.WriteLine("----------------------------------------------------\n");

                    _receiptHandle = message.ReceiptHandle;


                    Thread.Sleep(_receiveInterval);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Receive message failed, exception info: " + ex.Message);
            }

            /* 6. Async send message */
            try
            {
                var nativeQueue        = _client.GetNativeQueue(_queueName);
                var sendMessageRequest = new SendMessageRequest("阿里云计算");
                var response           = nativeQueue.SendMessageAsync(sendMessageRequest).Result;
                Console.WriteLine("Async Send message successfully, status code: {0}, MessageBodyMD5: {1}",
                                  response.MessageId, response.MessageBodyMD5);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Send message failed, exception info: " + ex.Message);
            }


            /* 7. Async receive message */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                for (int i = 0; i < _receiveTimes; i++)
                {
                    var receiveMessageRequest = new ReceiveMessageRequest();
                    var response = nativeQueue.ReceiveMessageAsync(receiveMessageRequest).Result;
                    Console.WriteLine("Async Receive message successfully, status code: {0}", response.HttpStatusCode);
                    Console.WriteLine("----------------------------------------------------");
                    var message = response.Message;
                    Console.WriteLine("MessageId: {0}", message.Id);
                    Console.WriteLine("ReceiptHandle: {0}", message.ReceiptHandle);
                    Console.WriteLine("MessageBody: {0}", message.Body);
                    Console.WriteLine("MessageBodyMD5: {0}", message.BodyMD5);
                    Console.WriteLine("EnqueueTime: {0}", message.EnqueueTime);
                    Console.WriteLine("NextVisibleTime: {0}", message.NextVisibleTime);
                    Console.WriteLine("FirstDequeueTime: {0}", message.FirstDequeueTime);
                    Console.WriteLine("DequeueCount: {0}", message.DequeueCount);
                    Console.WriteLine("Priority: {0}", message.Priority);
                    Console.WriteLine("----------------------------------------------------\n");

                    _receiptHandle = message.ReceiptHandle;


                    Thread.Sleep(_receiveInterval);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Receive message failed, exception info: " + ex.Message);
            }

            /* 8. Async change message visibility */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                var changeMessageVisibilityRequest = new ChangeMessageVisibilityRequest
                {
                    ReceiptHandle     = _receiptHandle,
                    VisibilityTimeout = 5
                };
                var changeMessageVisibilityResponse = nativeQueue.ChangeMessageVisibilityAsync(changeMessageVisibilityRequest).Result;
                Console.WriteLine("Async Change message visibility successfully, ReceiptHandle: {0}, NextVisibleTime: {1}",
                                  changeMessageVisibilityResponse.ReceiptHandle, changeMessageVisibilityResponse.NextVisibleTime);

                _receiptHandle = changeMessageVisibilityResponse.ReceiptHandle;

                Thread.Sleep(6000);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Change message visibility failed, exception info: " + ex.Message);
            }



            /* 9. Async peek message */
            try
            {
                var nativeQueue        = _client.GetNativeQueue(_queueName);
                var peekMessageRequest = new PeekMessageRequest();
                for (uint i = 0; i < _receiveTimes; i++)
                {
                    var peekMessageResponse = nativeQueue.PeekMessageAsync(peekMessageRequest).Result;
                    Console.WriteLine("Async Peek message successfully, status code: {0}", peekMessageResponse.HttpStatusCode);
                    Console.WriteLine("----------------------------------------------------");
                    var message = peekMessageResponse.Message;
                    Console.WriteLine("MessageId: {0}", message.Id);
                    Console.WriteLine("MessageBody: {0}", message.Body);
                    Console.WriteLine("MessageBodyMD5: {0}", message.BodyMD5);
                    Console.WriteLine("EnqueueTime: {0}", message.EnqueueTime);
                    Console.WriteLine("FirstDequeueTime: {0}", message.FirstDequeueTime);
                    Console.WriteLine("DequeueCount: {0}", message.DequeueCount);
                    Console.WriteLine("Priority: {0}", message.Priority);
                    Console.WriteLine("----------------------------------------------------\n");


                    Thread.Sleep(_receiveInterval);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Peek message failed, exception info: " + ex.Message);
            }

            /* 10. Async delete message */
            try
            {
                var nativeQueue            = _client.GetNativeQueue(_queueName);
                var receiveMessageResponse = nativeQueue.ReceiveMessage();
                _receiptHandle = receiveMessageResponse.Message.ReceiptHandle;
                var deleteMessageRequest  = new DeleteMessageRequest(_receiptHandle);
                var deleteMessageResponse = nativeQueue.DeleteMessageAsync(deleteMessageRequest).Result;
                Console.WriteLine("Async Delete message successfully, status code: {0}", deleteMessageResponse.HttpStatusCode);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Async BeginDeleteMessage failed, exception info: " + ex.Message);
            }



            /* 11. Async batch send message */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                List <SendMessageRequest> requests = new List <SendMessageRequest>();
                requests.Add(new SendMessageRequest("阿里云计算 Priority1", 0, 1));
                for (int i = 0; i < _batchSize; i++)
                {
                    requests.Add(new SendMessageRequest("阿里云计算" + i.ToString()));
                }
                BatchSendMessageRequest batchSendRequest = new BatchSendMessageRequest()
                {
                    Requests = requests
                };
                var response = nativeQueue.BatchSendMessageAsync(batchSendRequest).Result;
                Console.WriteLine("Async Batch send message successfully, messages count {0}", response.Responses.Count);
            }
            catch (Exception ex)
            {
                Console.WriteLine("BeginBatchSend message failed, exception info: " + ex.Message);
            }

            Thread.Sleep(12000);

            /* 12. Async batch peek message */
            try
            {
                var nativeQueue             = _client.GetNativeQueue(_queueName);
                var batchPeekMessageRequest = new BatchPeekMessageRequest(_batchSize + 2);
                Console.WriteLine(batchPeekMessageRequest.BatchSize.ToString());
                var batchPeekMessageResponse = nativeQueue.BatchPeekMessageAsync(batchPeekMessageRequest).Result;
                Console.WriteLine("Async Batch peek message successfully, status code: {0}, messages count {1}",
                                  batchPeekMessageResponse.HttpStatusCode, batchPeekMessageResponse.Messages.Count);
            }
            catch (Exception ex)
            {
                Console.WriteLine("BeginBatchPeek message failed, exception info: " + ex.Message);
            }

            /* 13. Async batch receive message */
            try
            {
                var nativeQueue = _client.GetNativeQueue(_queueName);
                BatchReceiveMessageRequest batchReceiveMessageRequest = new BatchReceiveMessageRequest(_batchSize + 1, 3);

                var _batchReceiveMessageResponse = nativeQueue.BatchReceiveMessageAsync(batchReceiveMessageRequest).Result;

                Console.WriteLine("Async Batch receive message successfully, status code: {0}, messages count {1}",
                                  _batchReceiveMessageResponse.HttpStatusCode, _batchReceiveMessageResponse.Messages.Count);
                Console.WriteLine("----------------------------------------------------");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Batch receive message failed, exception info: " + ex.Message);
            }

            /* 14. Async batch delete message */
            if (_batchReceiveMessageResponse != null && _batchReceiveMessageResponse.Messages.Count > 0)
            {
                try
                {
                    var           nativeQueue    = _client.GetNativeQueue(_queueName);
                    List <string> receiptHandles = new List <string>();
                    foreach (var message in _batchReceiveMessageResponse.Messages)
                    {
                        receiptHandles.Add(message.ReceiptHandle);
                    }
                    var batchDeleteMessageRequest = new BatchDeleteMessageRequest()
                    {
                        ReceiptHandles = receiptHandles
                    };
                    var batchDeleteMessageResponse = nativeQueue.BatchDeleteMessageAsync(batchDeleteMessageRequest).Result;

                    Console.WriteLine("Async Batch delete message successfully, status code: {0}", batchDeleteMessageResponse.HttpStatusCode);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Batch delete message failed, exception info: " + ex.Message);
                }
            }

            #endregion

            #region Clean Generated Queue

            /* 5.2. Async delete queue again */
            try
            {
                var response = _client.DeleteQueueAsync(deleteQueueRequest).Result;

                Console.WriteLine("Async Delete queue {0} successfully, status code: {1}", deleteQueueRequest.QueueName, response.HttpStatusCode);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Delete queue failed again, exception info: " + ex.Message);
            }



            #endregion

            Console.ReadKey();
        }