如何在RabbitMQ中重新安排具有特定时间的消息

时间:2018-01-21 22:41:57

标签: rabbitmq

我的问题:

我从RabbitMQ-Queue中取消一条消息。我尝试处理此消息并意识到它还无法处理。所以我想将它添加回队列并让它仅在特定时间+ 5000ms返回。不幸的是,这比我想象的更具挑战性。

我尝试了什么:

RabbitMQ死信属性 - >我的问题在于,即使手册说默认交换绑定到每个队列,它也不会根据路由标准转发它。我试图添加expires =“5000”和x-dead-letter-routing-key =“queuename”也是“x-dead-letter-exchange =”“,因为默认交换应该有效。唯一有效的部分是过期的部分。消息将消失并进入黑暗。这也发生在死信交换beeing amq.direct中,包括对目标队列的绑定。

为我打开差距: 如果接收器必须是死信队列,并且如果我死信队列是具有扩展功能的基本队列,那么我在黑暗中有点离开。还不清楚这些参数(x-dead-letter ..)是否仅适用于DLX队列。我想做这个延迟交付持久和纯粹通过。消息属性而不是通过。队列配置(仅在需要时)。

我在网上搜索并检查了许多不同的死信信息。我正在尝试使用RabbitMQ作为传递机制来构建像体系结构这样的微服务(我使用从队列中获取工作并转发它的进程)。我相信这里的其他人已经有相同的运行,但我找不到任何关于此的博客。

1 个答案:

答案 0 :(得分:0)

我必须得出结论,在消息级别上它是不可能的。

我现在为每个正在使用的队列创建了一个单独的队列(" name.delayed"),我可以使用参数" expiration"添加消息。 = 5000

队列设置本身必须是一个死信队列,将其路由到队列" name"