RabbitMQ可以告诉我邮件被传递了多少次吗?

时间:2018-02-26 15:38:57

标签: c# rabbitmq message-queue

我正在使用来自RabbitMQ队列的一些消息。

我对消息的消费可能很复杂,所以如果我失败了,我想重试。

我的处理程序代码看起来有点像这样

            ........
            var handlers = new GetHandlers();
            try
            {
                handlers.Handle<T>(output);
               //log handled
            }
            catch (Exception ex)
            {
                //log fail
                channel.BasicNack(ea.DeliveryTag, false, true);
                return;
            }


            channel.BasicAck(ea.DeliveryTag, false);
            // Log all good.
        };

邮件上有一个Redelivered = true/false属性,但这并没有给我足够的信息来知道我之前看过多少次此邮件。

有没有办法让Rabbit设置传递尝试次数?

1 个答案:

答案 0 :(得分:1)

不在当前版本中。但是,您可以将此信息作为标题重新发布。或者,您可以使用某种分布式内存缓存(想想memcached或Couchbase)来存储此状态信息。

从架构的角度来看,您的应用程序的行为应该不同,具体取决于尝试消息的次数。如果您的应用由于格式错误而无法处理,则应立即拒绝该应用。如果存在临时条件,则在该条件解决之前不应使用消息。显然,每条规则都有例外。