我正在尝试在RabbitMQ中实现一个dlx队列。 这种情况非常简单 我有2个队列: 1)活着 2)死(x-dead-letter-exchange:“immediate”,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进行了测试
我错过了什么吗?
答案 0 :(得分:8)
当RabbitMQ中的消息“消失”时,问题通常归结为绑定。因此,为了让您的示例正常工作,我执行了以下操作:
创建2个队列,活着,死亡(使用TTL和DLX)
创建了一个名为immediate的交换,类型为DIRECT
使用路由密钥“dead”在交换“immediate”和“alive”队列之间创建绑定 - 原因是,消息的路由键进入死队列(如果使用默认值交换是'死',这需要在死信交换中的约束中匹配)。
这里的重要部分是立即交换和 alive 队列之间的绑定。
为了测试我在死队列中发布了一条消息,我可以看到它在死队列中短暂出现然后出现在活动队列中。