死信交换RabbitMQ丢弃消息

Fab*_*ito 7 exchange-server amqp rabbitmq dead-letter

我正在尝试在RabbitMQ中实现一个dlx队列.这个场景非常简单我有两个队列:1)活着2)死(x-dead-letter-exchange:"立即",x-message-ttl:5000)

和"立即"的交换必须1)活着

我试图运行这个例子:http: //blog.james-carr.org/2012/03/30/rabbitmq-sending-a-message-to-be-consumed-later/ 但似乎消息在删除后丢失ttl到期并且它们不会在交换机上发布,所以我的活动队列总是空的.

我还尝试在管理控制台中手动创建队列,我得到了相同的行为.

我用Ubuntu/rabbitmq 3.0.0以及Mac OS X和rabbitmq 2.8.7测试了它

我错过了什么吗?

kzh*_*hen 8

当RabbitMQ中的消息"消失"时,问题通常归结为绑定.因此,为了让您的示例正常工作,我执行了以下操作:

  1. 创建了两个队列,活着,死了(使用TTL和DLX)

  2. 创建了一个名为DIRECT类型的立即交换

  3. 使用路由密钥"dead"在交换"immediate"和"alive"队列之间创建绑定 - 原因是,消息进入死队列的路由密钥(如果使用默认交换是'死'这个需要匹配死信交换中的绑定).

这里的重要部分是立即交换和活动队列之间的绑定.

为了测试我在死队列中发布了一条消息,我可以看到它在死队列中短暂出现然后出现在活动队列中.

  • @AndreasÖhlund,尝试使用"每队列TTL"设计,而不是"每个消息TTL",如果可能的话. (2认同)