Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
        }