Beispiel #1
0
        public DeleteMessageBatchResponse DeleteMessageBatch(DeleteMessageBatchRequest request)
        {
            if (request.Entries == null || request.Entries.Count <= 0)
            {
                throw new EmptyBatchRequestException("No entires in request");
            }

            if (request.Entries.Count > SqsQueueDefinition.MaxBatchDeleteItems)
            {
                throw new TooManyEntriesInBatchRequestException(
                          $"Count of [{request.Entries.Count}] exceeds limit of [{SqsQueueDefinition.MaxBatchDeleteItems}]");
            }

            var q = GetQueue(request.QueueUrl);

            var response = new DeleteMessageBatchResponse
            {
                Failed     = new List <BatchResultErrorEntry>(),
                Successful = new List <DeleteMessageBatchResultEntry>()
            };

            var entryIds = new HashSet <string>();

            foreach (var entry in request.Entries)
            {
                var success = false;
                BatchResultErrorEntry batchError = null;

                try
                {
                    if (entryIds.Contains(entry.Id))
                    {
                        throw new BatchEntryIdsNotDistinctException($"Duplicate Id of [{entry.Id}]");
                    }

                    entryIds.Add(entry.Id);

                    success = q.DeleteMessage(new DeleteMessageRequest
                    {
                        QueueUrl      = request.QueueUrl,
                        ReceiptHandle = entry.ReceiptHandle
                    });
                }
                catch (ReceiptHandleIsInvalidException rhex)
                {
                    batchError = new BatchResultErrorEntry
                    {
                        Id      = entry.Id,
                        Message = rhex.Message,
                        Code    = rhex.ErrorCode
                    };
                }
                catch (MessageNotInflightException mfex)
                {
                    batchError = new BatchResultErrorEntry
                    {
                        Id      = entry.Id,
                        Message = mfex.Message,
                        Code    = mfex.ErrorCode
                    };
                }

                if (success)
                {
                    response.Successful.Add(new DeleteMessageBatchResultEntry
                    {
                        Id = entry.Id
                    });
                }
                else
                {
                    var entryToQueue = batchError ?? new BatchResultErrorEntry
                    {
                        Id      = entry.Id,
                        Message = "FakeDeleteError",
                        Code    = "456"
                    };

                    response.Failed.Add(entryToQueue);
                }
            }

            return(response);
        }
Beispiel #2
0
 public Task <DeleteMessageBatchResponse> DeleteMessageBatchAsync(DeleteMessageBatchRequest request, CancellationToken token = default(CancellationToken))
 {
     return(DeleteMessageBatch(request).AsTaskResult());
 }
Beispiel #3
0
        public override async Task <DeleteMessageBatchResponse> DeleteMessageBatchAsync(DeleteMessageBatchRequest deleteMessageBatchRequest, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (deleteMessageBatchRequest == null)
            {
                throw new AmazonClientException("deleteMessageBatchRequest cannot be null");
            }

            if (!clientConfiguration.IsLargePayloadSupportEnabled)
            {
                return(await base.DeleteMessageBatchAsync(deleteMessageBatchRequest, cancellationToken).ConfigureAwait(false));
            }

            foreach (var entry in deleteMessageBatchRequest.Entries.Where(entry => IsS3ReceiptHandle(entry.ReceiptHandle)))
            {
                if (!clientConfiguration.RetainS3Messages)
                {
                    await DeleteMessagePayloadFromS3Async(entry.ReceiptHandle, cancellationToken).ConfigureAwait(false);
                }

                entry.ReceiptHandle = GetOriginalReceiptHandle(entry.ReceiptHandle);
            }

            return(await base.DeleteMessageBatchAsync(deleteMessageBatchRequest, cancellationToken));
        }
Beispiel #4
0
 public Task <DeleteMessageBatchResponse> DeleteMessageBatchAsync(DeleteMessageBatchRequest request, CancellationToken cancellationToken = new CancellationToken())
 {
     throw new System.NotImplementedException();
 }
Beispiel #5
0
 public static DeleteMessageBatchResponse DeleteMessageBatch(this IAmazonSQS client, DeleteMessageBatchRequest request)
 {
     return(client.DeleteMessageBatchAsync(request).GetResult());
 }
 public virtual Task <DeleteMessageBatchResponse> DeleteMessageBatchAsync(DeleteMessageBatchRequest request, CancellationToken cancellationToken = default(CancellationToken))
 {
     return(amazonSqsToBeExtended.DeleteMessageBatchAsync(request, cancellationToken));
 }
 public DeleteMessageBatchResponse DeleteMessageBatch(DeleteMessageBatchRequest request)
 {
     throw new System.NotImplementedException();
 }
Beispiel #8
0

        
        public virtual async Task <DeleteMessageBatchResponse> DeleteMessageBatchAsync(DeleteMessageBatchRequest deleteMessageBatchRequest)
        {
            var deleteMessageResponse = await _amazonSqsClient.DeleteMessageBatchAsync(deleteMessageBatchRequest);

            return(deleteMessageResponse);
        }
Beispiel #10
0
        public async Task <bool> DeleteMessagesAsync <T>(IEnumerable <MessageEntry <T> > messages, string queueUrl = "") where T : IIdentifiable <string>
        {
            try
            {
                var queueEndpoint = GetQueueEndpoint(queueUrl);

                int pageSize      = 10;
                int messagesCount = 0;
                int totalMessages = messages.Count();

                IList <Task <DeleteMessageBatchResponse> > responseTasks = new List <Task <DeleteMessageBatchResponse> >();

                while (messagesCount < totalMessages)
                {
                    var requests = new List <DeleteMessageBatchRequestEntry>();

                    int currentMessagesCount = 0;
                    int objIndex             = messagesCount;

                    while (objIndex < totalMessages && currentMessagesCount < pageSize)
                    {
                        var message = messages.ElementAt(objIndex);

                        requests.Add(new DeleteMessageBatchRequestEntry
                        {
                            Id            = message.Id,
                            ReceiptHandle = message.ReceiptHandle
                        });

                        currentMessagesCount++;
                        objIndex = messagesCount + currentMessagesCount;
                    }

                    var request      = new DeleteMessageBatchRequest(queueEndpoint, requests);
                    var responseTask = _amazonSQS.DeleteMessageBatchAsync(request);
                    responseTasks.Add(responseTask);

                    messagesCount += requests.Count;
                }

                IEnumerable <DeleteMessageBatchResponse> responses = await Task.WhenAll(responseTasks);

                foreach (var response in responses)
                {
                    if (response.HttpStatusCode != HttpStatusCode.OK)
                    {
                        throw new Exception($"Error deleting message. HttpStatusCode: {response.HttpStatusCode}");
                    }

                    if (response.Failed?.Any() == true)
                    {
                        throw new Exception($"Error deleting message. Code: {response.Failed[0].Code}. Error: {response.Failed[0].Message}");
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception($"Error to delete messages. {ex.Message}");
            }


            return(true);
        }
Beispiel #11
0
 public DeleteMessageBatchResponse DeleteMessageBatch(DeleteMessageBatchRequest request) => throw new NotImplementedException();
Beispiel #12
0
 public abstract Task <DeleteMessageBatchResponse> DeleteMessageBatchAsync(DeleteMessageBatchRequest request, CancellationToken cancellationToken = default);
 public virtual DeleteMessageBatchResponse DeleteMessageBatch(DeleteMessageBatchRequest request)
 {
     return(amazonSqsToBeExtended.DeleteMessageBatch(request));
 }