コード例 #1
0
        public async Task PublishAsync(Message message, PublishMetadata metadata, CancellationToken cancellationToken)
        {
            var request = BuildSendMessageRequest(message, metadata);
            SendMessageResponse response;

            try
            {
                response = await _client.SendMessageAsync(request, cancellationToken).ConfigureAwait(false);
            }
            catch (AmazonServiceException ex)
            {
                throw new PublishException(
                          $"Failed to publish message to SQS. {nameof(request.QueueUrl)}: {request.QueueUrl},{nameof(request.MessageBody)}: {request.MessageBody}",
                          ex);
            }

            using (Logger.BeginScope(new[]
            {
                new KeyValuePair <string, object>("AwsRequestId", response?.MessageId)
            }))
            {
                Logger.LogInformation(
                    "Published message {MessageId} of type {MessageType} to {DestinationType} '{MessageDestination}'.",
                    message.Id,
                    message.GetType().Name,
                    "Queue",
                    request.QueueUrl);
            }

            if (MessageResponseLogger != null)
            {
                var responseData = new MessageResponse
                {
                    HttpStatusCode   = response?.HttpStatusCode,
                    MessageId        = response?.MessageId,
                    ResponseMetadata = response?.ResponseMetadata
                };
                MessageResponseLogger.Invoke(responseData, message);
            }
        }
コード例 #2
0
        public async Task PublishAsync(Message message, PublishMetadata metadata, CancellationToken cancellationToken)
        {
            var             request  = BuildPublishRequest(message, metadata);
            PublishResponse response = null;

            try
            {
                response = await Client.PublishAsync(request, cancellationToken).ConfigureAwait(false);
            }
            catch (AmazonServiceException ex)
            {
                if (!ClientExceptionHandler(ex, message))
                {
                    throw new PublishException(
                              $"Failed to publish message to SNS. Topic ARN: '{request.TopicArn}', Subject: '{request.Subject}', Message: '{request.Message}'.",
                              ex);
                }
            }

            _logger.LogInformation(
                "Published message: '{SnsSubject}' with content {SnsMessage} and request Id '{SnsRequestId}'",
                request.Subject,
                request.Message,
                response?.ResponseMetadata?.RequestId);

            if (MessageResponseLogger != null)
            {
                var responseData = new MessageResponse
                {
                    HttpStatusCode   = response?.HttpStatusCode,
                    MessageId        = response?.MessageId,
                    ResponseMetadata = response?.ResponseMetadata
                };
                MessageResponseLogger.Invoke(responseData, message);
            }
        }