예제 #1
0
        public Task Send(ExceptionReceiveContext context)
        {
            void PreSend(SendMessageRequest sendMessageRequest, IDictionary <string, MessageAttributeValue> headers)
            {
                _headerAdapter.SetExceptionHeaders(headers, context);
            }

            return(Move(context, PreSend));
        }
예제 #2
0
        public Task Send(ExceptionReceiveContext context)
        {
            void PreSend(SendMessageRequest sendMessageRequest, SendHeaders headers)
            {
                headers.SetExceptionHeaders(context.Exception, context.ExceptionTimestamp);
            }

            return(Move(context, PreSend));
        }
예제 #3
0
        public Task Send(ExceptionReceiveContext context)
        {
            void PreSend(InMemoryTransportMessage message, IDictionary <string, object> headers)
            {
                headers.SetExceptionHeaders(context);
            }

            return(Move(context, PreSend));
        }
예제 #4
0

        
        public Task Send(ExceptionReceiveContext context)
        {
            void PreSend(InMemoryTransportMessage message, SendHeaders headers)
            {
                headers.SetExceptionHeaders(context.Exception, context.ExceptionTimestamp);
            }

            return(Move(context, PreSend));
        }
예제 #6
0
        public Task Send(ExceptionReceiveContext context)
        {
            void PreSend(Message message, IDictionary <string, object> headers)
            {
                headers.SetExceptionHeaders(context);

                message.TimeToLive = Defaults.BasicMessageTimeToLive;
            }

            return(Move(context, PreSend));
        }
예제 #7
0
        public Task Send(ExceptionReceiveContext context)
        {
            void PreSend(Message message, SendHeaders headers)
            {
                headers.SetExceptionHeaders(context.Exception, context.ExceptionTimestamp);

                message.TimeToLive = Defaults.BasicMessageTimeToLive;
            }

            return(Move(context, PreSend));
        }
예제 #8
0
        public Task Send(ExceptionReceiveContext context)
        {
            void PreSend(IBasicProperties message, SendHeaders headers)
            {
                headers.SetExceptionHeaders(context);

                message.ClearExpiration();
            }

            return(Move(context, PreSend));
        }
예제 #9
0
        /// <summary>
        /// Set the host headers on the SendContext (for error, dead-letter, etc.)
        /// </summary>
        /// <param name="headers"></param>
        /// <param name="exceptionContext"></param>
        public static void SetExceptionHeaders(this SendHeaders headers, ExceptionReceiveContext exceptionContext)
        {
            var exception = exceptionContext.Exception.GetBaseException() ?? exceptionContext.Exception;

            var exceptionMessage = ExceptionUtil.GetMessage(exception);

            headers.Set(MessageHeaders.Reason, "fault");

            headers.Set(MessageHeaders.FaultExceptionType, TypeMetadataCache.GetShortName(exception.GetType()));
            headers.Set(MessageHeaders.FaultMessage, exceptionMessage);
            headers.Set(MessageHeaders.FaultTimestamp, exceptionContext.ExceptionTimestamp.ToString("O"));
            headers.Set(MessageHeaders.FaultStackTrace, ExceptionUtil.GetStackTrace(exception));

            if (exceptionContext.TryGetPayload(out ConsumerFaultInfo info))
            {
                headers.Set(MessageHeaders.FaultConsumerType, info.ConsumerType);
                headers.Set(MessageHeaders.FaultMessageType, info.MessageType);
            }
        }
 public static void SetExceptionHeaders(this IDictionary <string, object> dictionary, ExceptionReceiveContext exceptionContext)
 {
     _adapter.SetExceptionHeaders(dictionary, exceptionContext);
 }
        /// <summary>
        /// Set the host headers on the SendContext (for error, dead-letter, etc.)
        /// </summary>
        /// <param name="adapter"></param>
        /// <param name="headers"></param>
        /// <param name="exceptionContext"></param>
        public static void SetExceptionHeaders <T>(this ITransportSetHeaderAdapter <T> adapter, IDictionary <string, T> headers, ExceptionReceiveContext
                                                   exceptionContext)
        {
            var exception = exceptionContext.Exception.GetBaseException() ?? exceptionContext.Exception;

            var exceptionMessage = ExceptionUtil.GetMessage(exception);

            adapter.Set(headers, MessageHeaders.Reason, "fault");

            adapter.Set(headers, MessageHeaders.FaultExceptionType, TypeMetadataCache.GetShortName(exception.GetType()));
            adapter.Set(headers, MessageHeaders.FaultMessage, exceptionMessage);
            adapter.Set(headers, MessageHeaders.FaultTimestamp, exceptionContext.ExceptionTimestamp);
            adapter.Set(headers, MessageHeaders.FaultStackTrace, ExceptionUtil.GetStackTrace(exception));

            if (exceptionContext.TryGetPayload(out ConsumerFaultInfo info))
            {
                adapter.Set(headers, MessageHeaders.FaultConsumerType, info.ConsumerType);
                adapter.Set(headers, MessageHeaders.FaultMessageType, info.MessageType);
            }

            if (exceptionContext.TryGetPayload(out RetryContext retryContext) && retryContext.RetryCount > 0)
            {
                adapter.Set(headers, MessageHeaders.FaultRetryCount, retryContext.RetryCount);
            }
        }