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); }
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); }