死信交换RabbitMQ丢弃消息

时间:2012-11-29 10:41:58

标签: exchange-server rabbitmq amqp dead-letter

我正在尝试在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进行了测试

我错过了什么吗?

1 个答案:

答案 0 :(得分:8)

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

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

  2. 创建了一个名为immediate的交换,类型为DIRECT

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

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

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