/// <summary>
        /// Sends a collection of messages inside a batch transaction
        /// </summary>
        /// <param name="messages"></param>
        public void SendBatch(IEnumerable <Envelope <Stream> > messages)
        {
            SendMessageBatchRequest msgRequest = AmazonSQSMessageConverter.ConstructMessage(messages);

            msgRequest.QueueUrl = QueueName;

            _client.SendMessageBatch(msgRequest);
        }
Esempio n. 2
0
 public void Flush()
 {
     if (_entries.Count == 0)
     {
         return;
     }
     _sqsClient.SendMessageBatch(new SendMessageBatchRequest(_queueUrl, _entries));
     _entries.Clear();
 }
Esempio n. 3
0
        public override bool Handle(IList <T> batch)
        {
            if (batch.Count == 0)
            {
                return(true);
            }
            var map     = batch.ToDictionary(item => Guid.NewGuid());
            var request = CreateBatchRequest(map);

            var response = _client.SendMessageBatch(request);

            if (response.IsSetSendMessageBatchResult())
            {
                var result = response.SendMessageBatchResult;
                if (result.IsSetBatchResultErrorEntry())
                {
                    return(result.BatchResultErrorEntry.Count == 0 || CollectErrors(result, map));
                }
            }
            return(false);
        }
Esempio n. 4
0
        public bool SendMessages(List <Message> messages)
        {
            var queueUrl = GetQueueUrl(MailerQueueName);

            var entries = new List <SendMessageBatchRequestEntry>();

            foreach (var message in messages)
            {
                entries.Add(new SendMessageBatchRequestEntry
                {
                    Id                = message.Id.ToString(),
                    MessageBody       = message.Body,
                    MessageAttributes = new Dictionary <string, MessageAttributeValue>
                    {
                        {
                            "MessageType",
                            new MessageAttributeValue
                            {
                                StringValue = MessageType.Email.ToString()
                            }
                        }
                    }
                }
                            );
            }

            var sendMessageBatchRequest = new SendMessageBatchRequest
            {
                Entries  = entries,
                QueueUrl = queueUrl
            };

            var sendMessageBatchResponse = _sqsClient.SendMessageBatch(sendMessageBatchRequest);

            // TODO: Handle failures.

            return(sendMessageBatchResponse.HttpStatusCode.Equals(HttpStatusCode.OK));
        }
Esempio n. 5
0
        public static void SQSSendMessageBatch()
        {
            #region SQSSendMessageBatch
            var client = new AmazonSQSClient();

            var entry1 = new SendMessageBatchRequestEntry
            {
                DelaySeconds      = 0,
                Id                = "Entry1",
                MessageAttributes = new Dictionary <string, MessageAttributeValue>
                {
                    {
                        "MyNameAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "John Doe"
                        }
                    },
                    {
                        "MyAddressAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "123 Main St."
                        }
                    },
                    {
                        "MyRegionAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "Any Town, United States"
                        }
                    }
                },
                MessageBody = "John Doe customer information."
            };

            var entry2 = new SendMessageBatchRequestEntry
            {
                DelaySeconds      = 0,
                Id                = "Entry2",
                MessageAttributes = new Dictionary <string, MessageAttributeValue>
                {
                    {
                        "MyNameAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "Jane Doe"
                        }
                    },
                    {
                        "MyAddressAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "456 Center Road"
                        }
                    },
                    {
                        "MyRegionAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "Any City, United States"
                        }
                    }
                },
                MessageBody = "Jane Doe customer information."
            };

            var entry3 = new SendMessageBatchRequestEntry
            {
                DelaySeconds      = 0,
                Id                = "Entry3",
                MessageAttributes = new Dictionary <string, MessageAttributeValue>
                {
                    {
                        "MyNameAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "Richard Doe"
                        }
                    },
                    {
                        "MyAddressAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "789 East Blvd."
                        }
                    },
                    {
                        "MyRegionAttribute", new MessageAttributeValue
                        {
                            DataType = "String", StringValue = "Anywhere, United States"
                        }
                    }
                },
                MessageBody = "Richard Doe customer information."
            };

            var request = new SendMessageBatchRequest
            {
                Entries = new List <SendMessageBatchRequestEntry>()
                {
                    entry1, entry2, entry3
                },
                QueueUrl = "https://sqs.us-east-1.amazonaws.com/80398EXAMPLE/MyTestQueue"
            };

            var response = client.SendMessageBatch(request);

            if (response.Successful.Count > 0)
            {
                Console.WriteLine("Successfully sent:");

                foreach (var success in response.Successful)
                {
                    Console.WriteLine("  For ID: '" + success.Id + "':");
                    Console.WriteLine("    Message ID = " + success.MessageId);
                    Console.WriteLine("    MD5 of message attributes = " +
                                      success.MD5OfMessageAttributes);
                    Console.WriteLine("    MD5 of message body = " +
                                      success.MD5OfMessageBody);
                }
            }

            if (response.Failed.Count > 0)
            {
                Console.WriteLine("Failed to be sent:");

                foreach (var fail in response.Failed)
                {
                    Console.WriteLine("  For ID '" + fail.Id + "':");
                    Console.WriteLine("    Code = " + fail.Code);
                    Console.WriteLine("    Message = " + fail.Message);
                    Console.WriteLine("    Sender's fault? = " +
                                      fail.SenderFault);
                }
            }
            #endregion

            Console.ReadLine();
        }
        public void TestSendBatchMessageToQueue()
        {
            AmazonSQSConfig SqsConfig = new AmazonSQSConfig
            {
                ServiceURL = "http://sqs.us-east-2.amazonaws.com"
            };

            AmazonSQSClient SqsClient = new AmazonSQSClient(SqsConfig);
            string          QueueUrl  = "https://sqs.us-east-2.amazonaws.com/330261344570/TestingTheQueue";

            ClearMessageQueue(SqsClient, QueueUrl);

            // We are using hash set as we will be using it to assert if all the messages are recieved
            // in any random order.
            HashSet <string> messagesHashSet = new HashSet <string>();

            messagesHashSet.Add("First Message");
            messagesHashSet.Add("Second Message");
            messagesHashSet.Add("Third Message");

            // Since indexing cant be applied on HashSet, this is a temporary variable taken
            var messagesArray = messagesHashSet.ToArray();

            var sendMessageBatchRequest = new SendMessageBatchRequest
            {
                Entries = new List <SendMessageBatchRequestEntry>
                {
                    new SendMessageBatchRequestEntry("message1", messagesArray[0]),
                    new SendMessageBatchRequestEntry("message2", messagesArray[1]),
                    new SendMessageBatchRequestEntry("message3", messagesArray[2])
                },
                QueueUrl = QueueUrl,
            };

            var sendMessageResponse = SqsClient.SendMessageBatch(sendMessageBatchRequest);

            Assert.IsNotNull(sendMessageResponse, "Send message test.");

            var receiveMessageRequest = new ReceiveMessageRequest();
            int index = 0;

            while (true)
            {
                receiveMessageRequest.QueueUrl = QueueUrl;
                var receiveMessageResponse = SqsClient.ReceiveMessage(receiveMessageRequest);
                var messages = receiveMessageResponse.Messages;

                if (!messages.Any())
                {
                    break;
                }
                index++;

                foreach (var message in messages)
                {
                    messagesHashSet.Add(message.Body);
                    ProcessAndDelete(message, SqsClient, QueueUrl);
                }
            }

            // Test the sent messages recieved as distinct.
            Assert.IsTrue(index == 3, "Same number of Messages Recieved as Sent");

            // If the hashset contains all the sent messages after adding the recieved message,
            // we can be assured that no extra message has been recieved
            Assert.IsTrue(messagesHashSet.Count == 3, "Exact same messages test recieved as sent");
        }