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}].")); }
/// <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); } }
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); }
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;