/// <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); }
public void Flush() { if (_entries.Count == 0) { return; } _sqsClient.SendMessageBatch(new SendMessageBatchRequest(_queueUrl, _entries)); _entries.Clear(); }
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); }
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)); }
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"); }