c# - RabbitMQ 可以告诉我一条消息已传递了多少次吗?

标签 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 设置发送尝试的次数?

最佳答案

当前版本中没有。但是,您可以重新发布包含此信息作为标题的消息。或者,您可以使用某种分布式内存缓存(例如 memcached 或 Couchbase)来存储此状态信息。

从体系结构的角度来看,您的应用程序不应根据尝试消息的次数而表现出不同的行为。如果您的应用程序由于格式错误而无法处理它,则应立即拒绝它。如果存在临时情况,则在该情况解决之前不应使用消息。显然,每条规则都有异常(exception)。

关于c# - RabbitMQ 可以告诉我一条消息已传递了多少次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48991982/

相关文章:

node.js - 如何使用 mocha 和 chi 检查 Node js 中的 Rabbit 连接以进行单元测试

c++ - WindowProc 调用时序

c# - WPF:只能使用 StaticResource 一次

c# - 在 C# 中检测此参数差异

elasticsearch - 将RabbitMQ连接到Logstash的RCP

java - RabbitMQ 直接回复。我收到了 AlreadyClosedException

azure - 如何获取队列消息类型

rabbitmq - MassTransit 和 Unity - 如何避免向消费者发送重复的消息?

c# - 动态自定义树访问

c# - 如何将2个WAV文件混合在一起?