public async Task Send(ClientContext context) { LogContext.SetCurrentIfNull(_context.LogContext); await _context.ConfigureTopologyPipe.Send(context).ConfigureAwait(false); var sendContext = new AmazonSqsMessageSendContext <T>(_message, _cancellationToken); await _pipe.Send(sendContext).ConfigureAwait(false); StartedActivity?activity = LogContext.IfEnabled(OperationName.Transport.Send)?.StartSendActivity(sendContext); try { if (_context.SendObservers.Count > 0) { await _context.SendObservers.PreSend(sendContext).ConfigureAwait(false); } var request = await context.CreatePublishRequest(_context.EntityName, sendContext.Body).ConfigureAwait(false); _context.SnsSetHeaderAdapter.Set(request.MessageAttributes, sendContext.Headers); _context.SnsSetHeaderAdapter.Set(request.MessageAttributes, "Content-Type", sendContext.ContentType.MediaType); _context.SnsSetHeaderAdapter.Set(request.MessageAttributes, nameof(sendContext.CorrelationId), sendContext.CorrelationId); if (!string.IsNullOrEmpty(sendContext.DeduplicationId)) { request.MessageDeduplicationId = sendContext.DeduplicationId; } if (!string.IsNullOrEmpty(sendContext.GroupId)) { request.MessageGroupId = sendContext.GroupId; } await context.Publish(request, sendContext.CancellationToken).ConfigureAwait(false); sendContext.LogSent(); activity.AddSendContextHeadersPostSend(sendContext); if (_context.SendObservers.Count > 0) { await _context.SendObservers.PostSend(sendContext).ConfigureAwait(false); } } catch (Exception ex) { sendContext.LogFaulted(ex); if (_context.SendObservers.Count > 0) { await _context.SendObservers.SendFault(sendContext, ex).ConfigureAwait(false); } throw; } finally { activity?.Stop(); } }
public async Task Send(ClientContext context) { LogContext.SetCurrentIfNull(_context.LogContext); await _context.ConfigureTopologyPipe.Send(context).ConfigureAwait(false); var sendContext = new AmazonSqsMessageSendContext <T>(_message, _cancellationToken); await _pipe.Send(sendContext).ConfigureAwait(false); StartedActivity?activity = LogContext.IfEnabled(OperationName.Transport.Send)?.StartSendActivity(sendContext); try { if (_context.SendObservers.Count > 0) { await _context.SendObservers.PreSend(sendContext).ConfigureAwait(false); } var message = new SendMessageBatchRequestEntry("", sendContext.BodyText) { Id = sendContext.MessageId.ToString() }; _context.SqsSetHeaderAdapter.Set(message.MessageAttributes, sendContext.Headers); _context.SqsSetHeaderAdapter.Set(message.MessageAttributes, "Content-Type", sendContext.ContentType.MediaType); _context.SqsSetHeaderAdapter.Set(message.MessageAttributes, MessageHeaders.CorrelationId, sendContext.CorrelationId); if (!string.IsNullOrEmpty(sendContext.DeduplicationId)) { message.MessageDeduplicationId = sendContext.DeduplicationId; } if (!string.IsNullOrEmpty(sendContext.GroupId)) { message.MessageGroupId = sendContext.GroupId; } var delay = sendContext.Delay?.TotalSeconds; if (delay > 0) { message.DelaySeconds = (int)delay.Value; } await context.SendMessage(_context.EntityName, message, sendContext.CancellationToken).ConfigureAwait(false); sendContext.LogSent(); activity.AddSendContextHeadersPostSend(sendContext); if (_context.SendObservers.Count > 0) { await _context.SendObservers.PostSend(sendContext).ConfigureAwait(false); } } catch (Exception ex) { sendContext.LogFaulted(ex); if (_context.SendObservers.Count > 0) { await _context.SendObservers.SendFault(sendContext, ex).ConfigureAwait(false); } throw; } finally { activity?.Stop(); } }