Exemple #1
0
        public MessageInformations ApplyRetryStrategy(Channel channel, T deliveredMessage)
        {
            if (String.IsNullOrEmpty(deliveredMessage.DeliveryTag))
            {
                throw new ArgumentNullException(nameof(deliveredMessage.DeliveryTag));
            }
            if (!RetryInformations.ContainsKey(deliveredMessage.DeliveryTag))
            {
                throw new MerqureToolsException($"unknown delivery tag {deliveredMessage.DeliveryTag}");
            }

            RetryInformations retryInformations = RetryInformations[deliveredMessage.DeliveryTag];
            var messageInformations             = new MessageInformations();

            if (IsGoingToErrorExchange(retryInformations))
            {
                _producer.PublishOnErrorExchange(channel, deliveredMessage, retryInformations);
                messageInformations.IsOnErrorBus = true;
            }
            else
            {
                _producer.PublishOnRetryExchange(channel, deliveredMessage, retryInformations);
            }

            AcknowlegdeDeliveredMessage(channel, deliveredMessage);
            RetryInformations.Remove(deliveredMessage.DeliveryTag);
            return(messageInformations);
        }
Exemple #2
0
        internal void SendToErrorExchange(Channel channel, T deliveredMessage)
        {
            if (String.IsNullOrEmpty(deliveredMessage.DeliveryTag))
            {
                throw new ArgumentNullException(nameof(deliveredMessage.DeliveryTag));
            }
            if (!RetryInformations.ContainsKey(deliveredMessage.DeliveryTag))
            {
                throw new MerqureToolsException($"unknown delivery tag {deliveredMessage.DeliveryTag}");
            }

            RetryInformations retryInformations = RetryInformations[deliveredMessage.DeliveryTag];

            _producer.PublishOnErrorExchange(channel, deliveredMessage, retryInformations);
            AcknowlegdeDeliveredMessage(channel, deliveredMessage);
            RetryInformations.Remove(deliveredMessage.DeliveryTag);
        }