Esempio n. 1
0
        public async ValueTask <MessageQueueMessage> DequeueAsync(MessageDequeueOptions options, CancellationToken cancellation = default)
        {
            if (options == null)
            {
                options = MessageDequeueOptions.Default;
            }

            var waitSeconds = (long)Math.Ceiling(options.Timeout.TotalSeconds);
            var request     = new HttpRequestMessage(HttpMethod.Get, this.GetRequestUrl("messages") + (options != null && options.Timeout >= TimeSpan.Zero ? "?waitseconds=" + waitSeconds.ToString() : string.Empty));

            request.Headers.Add("x-mns-version", "2015-06-06");
            var response = await _http.SendAsync(request, cancellation);

            if (response.IsSuccessStatusCode)
            {
                return(MessageUtility.ResolveMessage(this, await response.Content.ReadAsStreamAsync(cancellation)));
            }

            var exception = AliyunException.Parse(await response.Content.ReadAsStringAsync(cancellation));

            if (exception != null)
            {
                switch (exception.Code)
                {
                case MessageUtility.MessageNotExist:
                    return(MessageQueueMessage.Empty);

                case MessageUtility.QueueNotExist:
                    throw exception;

                default:
                    throw exception;
                }
            }

            return(MessageQueueMessage.Empty);
        }
Esempio n. 2
0
 public PollArgument(MessageDequeueOptions options, int interval = 1000)
 {
     this.Options  = options ?? MessageDequeueOptions.Default;
     this.Interval = Math.Max(interval, 100);
 }