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



我的问题:

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

我尝试过:

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

为我打开差距: 我有点蒙在鼓里的地方是,如果接收者必须是死信队列,如果我的死信队列是具有扩展功能的基本队列。也不清楚这些参数(x-dead-letter..)是否仅适用于DLX队列。我想做这个延迟交付持续和纯粹通过。消息属性而不是 via。队列配置(仅在需要时)。

我在网上搜索并检查了许多不同的死信信息。我试图在使用 RabbitMQ 作为交付机制的同时构建类似微服务的架构(我使用从队列中获取工作并转发它的进程)。我相信这里的其他人已经有同样的运行,但我找不到任何关于这个的博客。

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

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

队列设置本身必须是将其路由到队列"名称"的死信队列

最新更新