// TODO: Attributes

        internal SqsRequest ToParams()
        {
            var parameters = new SqsRequest {
                { "Action", "SendMessage" },
                { "MessageBody", MessageBody }
            };

            // Defaults to the queue visibility timeout
            if (Delay != null)
            {
                parameters.Add("DelaySeconds", (int)Delay.Value.TotalSeconds);
            }

            if (MessageDeduplicationId != null)
            {
                parameters.Add("MessageDeduplicationId", MessageDeduplicationId);
            }

            if (MessageGroupId != null)
            {
                parameters.Add("MessageGroupId", MessageGroupId);
            }

            return(parameters);
        }
示例#2
0
        public async Task <CreateQueueResult> CreateQueueAsync(string queueName, int defaultVisibilityTimeout = 30)
        {
            #region Preconditions

            if (queueName == null)
            {
                throw new ArgumentNullException(nameof(queueName));
            }

            #endregion

            var parameters = new SqsRequest {
                { "Action", "CreateQueue" },
                { "QueueName", queueName },
                { "DefaultVisibilityTimeout", defaultVisibilityTimeout } /* in seconds */
            };

            var httpRequest = new HttpRequestMessage(HttpMethod.Post, Endpoint)
            {
                Content = GetPostContent(parameters)
            };

            var responseText = await SendAsync(httpRequest).ConfigureAwait(false);

            return(CreateQueueResult.Parse(responseText));
        }
        internal SqsRequest ToParams()
        {
            var parameters = new SqsRequest {
                { "Action", "ChangeMessageVisibility" },
                { "ReceiptHandle", ReceiptHandle },
                { "VisibilityTimeout", (int)VisibilityTimeout.TotalSeconds }
            };

            return parameters;
        }
示例#4
0
        public async Task <string> DeleteMessageAsync(Uri queueUrl, string recieptHandle)
        {
            var parameters = new SqsRequest {
                { "Action", "DeleteMessage" },
                { "ReceiptHandle", recieptHandle }
            };

            var httpRequest = new HttpRequestMessage(HttpMethod.Post, queueUrl)
            {
                Content = GetPostContent(parameters)
            };

            return(await SendAsync(httpRequest).ConfigureAwait(false));
        }
示例#5
0
        internal SqsRequest GetParameters()
        {
            var parameters = new SqsRequest {
                { "Action", "SendMessage" },
                { "MessageBody", MessageBody }
            };

            // Defaults to the queue visibility timeout
            if (Delay != null)
            {
                parameters.Add("DelaySeconds", (int)Delay.Value.TotalSeconds);
            }

            if (MessageDeduplicationId != null)
            {
                parameters.Add("MessageDeduplicationId", MessageDeduplicationId);
            }

            if (MessageGroupId != null)
            {
                parameters.Add("MessageGroupId", MessageGroupId);
            }

            if (MessageAttributes != null)
            {
                for (int i = 0; i < MessageAttributes.Length; i++)
                {
                    ref MessageAttribute attr = ref MessageAttributes[i];

                    string prefix = "MessageAttribute." + (i + 1).ToString() + ".";

                    parameters.Add(prefix + "Name", attr.Name);

                    if (attr.Value.DataType == MessageAttributeDataType.Binary)
                    {
                        parameters.Add(prefix + "Value.BinaryValue", attr.Value.Value);
                    }
                    else
                    {
                        parameters.Add(prefix + "Value.StringValue", attr.Value.Value);
                    }

                    parameters.Add(prefix + "Value.DataType", attr.Value.DataType.ToString());
                }
            }
示例#6
0
        public async Task <DeleteMessageBatchResultEntry[]> DeleteMessageBatchAsync(Uri queueUrl, string[] recieptHandles)
        {
            #region Preconditions

            if (recieptHandles == null)
            {
                throw new ArgumentNullException(nameof(recieptHandles));
            }

            if (recieptHandles.Length > 10)
            {
                throw new ArgumentException("Must contain 10 or fewer items.", nameof(recieptHandles));
            }

            // Max payload = 64KB (65,536 bytes)

            #endregion

            var parameters = new SqsRequest {
                { "Action", "DeleteMessageBatch" }
            };

            for (int i = 0; i < recieptHandles.Length; i++)
            {
                var handle = recieptHandles[i];

                var prefix = "DeleteMessageBatchRequestEntry." + (i + 1) + ".";

                parameters.Add(prefix + "Id", i);                   // DeleteMessageBatchRequestEntry.n.Id
                parameters.Add(prefix + "ReceiptHandle", handle);   // DeleteMessageBatchRequestEntry.n.ReceiptHandle			Required
            }

            var httpRequest = new HttpRequestMessage(HttpMethod.Post, queueUrl)
            {
                Content = GetPostContent(parameters)
            };

            var responseText = await SendAsync(httpRequest).ConfigureAwait(false);

            // Because the batch request can result in a combination of successful and unsuccessful actions,
            // you should check for batch errors even when the call returns an HTTP status code of 200.
            return(DeleteMessageBatchResponse.Parse(responseText).DeleteMessageBatchResult.Items);
        }
示例#7
0
        /*
         * public Task DeleteQueue(string queueName)
         * {
         *  throw new NotImplementedException();
         * }
         */

        public async Task <List <SendMessageBatchResultEntry> > SendMessageBatchAsync(Uri queueUrl, string[] messages)
        {
            #region Preconditions

            if (messages == null)
            {
                throw new ArgumentNullException(nameof(messages));
            }

            if (messages.Length > 10)
            {
                throw new ArgumentException("Must be 10 or fewer.", nameof(messages));
            }

            // Max payload = 256KB (262,144 bytes)

            #endregion

            var parameters = new SqsRequest {
                { "Action", "SendMessageBatch" }
            };

            for (int i = 0; i < messages.Length; i++)
            {
                var message = messages[i];

                var prefix = "SendMessageBatchRequestEntry." + (i + 1) + ".";

                parameters.Add(prefix + "Id", i);                   // .Id				Required
                parameters.Add(prefix + "MessageBody", message);    // .MessageBody		Required
                                                                    // .DelaySeconds	Optional, Max 900(15min)
            }

            var httpRequest = new HttpRequestMessage(HttpMethod.Post, queueUrl)
            {
                Content = GetPostContent(parameters)
            };

            var responseText = await SendAsync(httpRequest).ConfigureAwait(false);

            return(SendMessageBatchResult.Parse(responseText));
        }
示例#8
0
        public SqsRequest ToParams()
        {
            var parameters = new SqsRequest {
                { "Action", "ReceiveMessage" },
                { "MaxNumberOfMessages", take },
            };

            if (lockTime != null) // Defaults to the queue visibility timeout
            {
                parameters.Add("VisibilityTimeout", (int)lockTime.Value.TotalSeconds);
            }

            // Default: The ReceiveMessageWaitTimeSeconds of the queue.
            if (waitTime != null)
            {
                parameters.Add("WaitTimeSeconds", (int)waitTime.Value.TotalSeconds);
            }

            return(parameters);
        }
        internal SqsRequest ToParams()
        {
            var parameters = new SqsRequest {
                { "Action", "ReceiveMessage" }
            };

            if (take > 1) // default is 1
            {
                parameters.Add("MaxNumberOfMessages", take);
            }

            if (AttributeNames != null)
            {
                for (int i = 0; i < AttributeNames.Length; i++)
                {
                    parameters.Add("AttributeName." + (i + 1), AttributeNames[i]);
                }
            }

            if (MessageAttributeNames != null)
            {
                for (int i = 0; i < MessageAttributeNames.Length; i++)
                {
                    parameters.Add("MessageAttributeName." + (i + 1), MessageAttributeNames[i]);
                }
            }

            if (lockTime != null) // Defaults to the queue visibility timeout
            {
                parameters.Add("VisibilityTimeout", (int)lockTime.Value.TotalSeconds);
            }

            if (waitTime != null) // Defaults to queue default
            {
                parameters.Add("WaitTimeSeconds", (int)waitTime.Value.TotalSeconds);
            }

            return(parameters);
        }
示例#10
0
        private static FormUrlEncodedContent GetPostContent(SqsRequest request)
        {
            request.Add("Version", Version);

            return(new FormUrlEncodedContent(request.Parameters));
        }