private DeleteMessagesResponseModel <string> ConstructDeleteBatchResponseModel(List <DeleteMessageBatchRequestEntry> deleteMessageBatchEntries, DeleteMessageBatchResponse deleteMessageBatchResponse) { DeleteMessagesResponseModel <string> deleteMessageBatchResponseModel = new DeleteMessagesResponseModel <string>(); deleteMessageBatchResponseModel.Successful .AddRange(deleteMessageBatchEntries.Where(entry => deleteMessageBatchResponse.Successful .Select(re => re.Id).Contains(entry.Id)).Select(entry => entry.ReceiptHandle)); deleteMessageBatchResponseModel.Failed .AddRange(deleteMessageBatchEntries.Where(entry => deleteMessageBatchResponse.Failed .Select(re => re.Id).Contains(entry.Id)).Select(entry => entry.ReceiptHandle)); return(deleteMessageBatchResponseModel); }
/// <summary> /// Removes messages from the queue after processing. /// </summary> /// <param name="receiptHandlers">The receiptHandlers received when a messages is red from the sqs queue.</param> /// <returns>The number of successful deleted messages and the number of messages for which the delete operation failed.</returns> public DeleteMessagesResponseModel <string> DeleteMessagesByReceiptHandler(IEnumerable <string> receiptHandlers) { DeleteMessagesResponseModel <string> deleteMessagesBatchGlobalResponse = new DeleteMessagesResponseModel <string>(); IEnumerable <string> receiptHandlersBatch = null; int skipNumber = 0; int batchSize = 10; do { receiptHandlersBatch = receiptHandlers.Skip(skipNumber).Take(batchSize); DeleteMessagesResponseModel <string> deleteMessagesBatchResponse = this.unitOfWork.DeleteMessages(receiptHandlersBatch); deleteMessagesBatchGlobalResponse.Successful.AddRange(deleteMessagesBatchResponse.Successful); deleteMessagesBatchGlobalResponse.Failed.AddRange(deleteMessagesBatchResponse.Failed); skipNumber += batchSize; }while (skipNumber < receiptHandlers.Count()); if (deleteMessagesBatchGlobalResponse.Failed.Count > 0) { skipNumber = 0; do { receiptHandlersBatch = deleteMessagesBatchGlobalResponse.Failed.Take(batchSize); foreach (string receiptHandler in receiptHandlersBatch) { deleteMessagesBatchGlobalResponse.Failed.Remove(receiptHandler); } DeleteMessagesResponseModel <string> deleteMessagesBatchResponse = this.unitOfWork.DeleteMessages(receiptHandlersBatch); deleteMessagesBatchGlobalResponse.Successful.AddRange(deleteMessagesBatchResponse.Successful); deleteMessagesBatchGlobalResponse.Failed.AddRange(deleteMessagesBatchResponse.Failed); }while(deleteMessagesBatchGlobalResponse.Failed.Count > 0); } return(deleteMessagesBatchGlobalResponse); }
public DeleteMessagesResponseModel <string> DeleteMessages(IEnumerable <string> receiptHandles) { List <DeleteMessageBatchRequestEntry> deleteMessageBatchEntries = new List <DeleteMessageBatchRequestEntry>(); int i = 0; foreach (string receiptHandle in receiptHandles) { i++; deleteMessageBatchEntries.Add(new DeleteMessageBatchRequestEntry() { Id = i.ToString(), ReceiptHandle = receiptHandle }); } DeleteMessageBatchRequest deleteMessageBatchRequest = new DeleteMessageBatchRequest(this.queueUrl, deleteMessageBatchEntries); DeleteMessageBatchResponse deleteMessageBatchResponse = sqsClient.DeleteMessageBatch(deleteMessageBatchRequest); DeleteMessagesResponseModel <string> deleteMessagesResponseModel = ConstructDeleteBatchResponseModel(deleteMessageBatchEntries, deleteMessageBatchResponse); return(deleteMessagesResponseModel); }