【发布时间】:2019-07-01 22:19:07
【问题描述】:
我想知道是否有任何方法可以将消息返回到队列中的原始位置。例如,假设我们有这样的顺序:
A-B-C-D A 是头部,D 是尾部。通常,当我们使用nack 或reject 和requeue=true 时,它只是将消息排入当前尾部之后。在这种情况下,当A 重新排队时,新的排序变为B-C-D-A。但是,我想知道是否有任何方法可以排入队列的开头。因此,如果 A 被“送回”,它将被放置在队列的开头,在它原来的位置。
我使用 Spring AMQP 搜索解决方案。
【问题讨论】:
-
这不是 AMQP 队列的工作方式。为什么需要这种行为?
-
我知道这不是他们的自然行为方式。我想这样做的原因是我需要在处理消息时遵循严格的顺序。例如,“follow X”和“unfollow X”消息应该按照它们发送的方式进行处理。我不想先处理“取消关注”。因此,假设在处理消息时数据库关闭,我通常发送
nack或reject和requeue=true,这会破坏订单。我可以自己解决这个问题。但我一直在寻找开箱即用的 Spring 或 Rabbit 可能支持的东西。希望这是有道理的。 -
如果没有看到对应的
follow消息,消费者应该nackunfollow消息。这将恢复自然秩序。 -
这需要数据库检查。例如,如果
follow和unfollow已在非常短的时间间隔内发送,那么您的建议可能有效。但是如果这两个之间有一个月。不会有任何对应的follow,我们必须检查数据库。顺便说一下,Follow/unfollow只是一个例子。案例可能更复杂。
标签: java rabbitmq spring-amqp spring-rabbit