Exemplo n.º 1
0
 public static Exception ToException(this BatchResultErrorEntry entry, [CallerMemberName] string methodOperation = null)
 {
     return(entry == null
         ? null
         : new Exception(
                $"Batch Entry exception for operation [{methodOperation}]. Id [{entry.Id}], Code [{entry.Code}], Is Sender Fault [{entry.SenderFault}]. Message [{entry.Message}]."));
 }
Exemplo n.º 2
0
        /// <summary>
        /// Демаршалинг масива с ошибками Batch-запросов
        /// </summary>
        /// <param name="batchList">коллекция содержащия XML объекты с ошибками</param>
        /// <param name="values">Лист, в который будут помещаться результаты ошибок</param>
        public static void BatchResultErrorEntryUnmarshaller(XmlNodeList batchList, List <BatchResultErrorEntry> values)
        {
            foreach (XmlNode item in batchList)
            {
                var senderFaultText = item.SelectSingleNode("SenderFault")?.InnerText;
                var senderFault     = !string.IsNullOrWhiteSpace(senderFaultText) ?
                                      (bool)Convert.ChangeType(senderFaultText, typeof(bool), CultureInfo.InvariantCulture) : false;

                BatchResultErrorEntry errorEntry = new BatchResultErrorEntry()
                {
                    Code        = item.SelectSingleNode("Code")?.InnerText,
                    Id          = item.SelectSingleNode("Id")?.InnerText,
                    Message     = item.SelectSingleNode("Message")?.InnerText,
                    SenderFault = senderFault
                };
                values.Add(errorEntry);
            }
        }
Exemplo n.º 3
0
        public SendMessageBatchResponse SendMessageBatch(SendMessageBatchRequest request)
        {
            if (request.Entries == null || request.Entries.Count <= 0)
            {
                throw new EmptyBatchRequestException("No entires in request");
            }

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

            var q = GetQueue(request.QueueUrl);

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

            var entryIds = new HashSet <string>();

            foreach (var entry in request.Entries)
            {
                string id = null;
                BatchResultErrorEntry batchError = null;

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

                    entryIds.Add(entry.Id);

                    id = q.Send(new SendMessageRequest
                    {
                        QueueUrl          = q.QueueDefinition.QueueUrl,
                        MessageAttributes = entry.MessageAttributes,
                        MessageBody       = entry.MessageBody,
                    });
                }
                catch (ReceiptHandleIsInvalidException rhex)
                {
                    batchError = new BatchResultErrorEntry
                    {
                        Id      = entry.Id,
                        Message = rhex.Message,
                        Code    = rhex.ErrorCode
                    };
                }

                if (id == null)
                {
                    var entryToQueue = batchError ?? new BatchResultErrorEntry
                    {
                        Id      = entry.Id,
                        Message = "FakeSendError",
                        Code    = "789"
                    };

                    response.Failed.Add(entryToQueue);
                }
                else
                {
                    response.Successful.Add(new SendMessageBatchResultEntry
                    {
                        Id        = entry.Id,
                        MessageId = id
                    });
                }
            }

            return(response);
        }
Exemplo n.º 4
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);
        }
 public Task OnFailureAsync(BatchResultErrorEntry batchResultErrorEntry, CancellationToken cancellationToken = default) => Task.CompletedTask;