首先,我引用RabbitMQ docs中的以下文字:
当消息重新排队时,如果可能,它将被放置在其队列中的原始位置 . 如果不是(由于当多个消费者共享队列时同时传递和来自其他消费者的确认),该消息将被重新排队到更靠近队列头的位置 .
现在想象一下,在同一个队列中有两条消息(A和B),两个都没有被解包:当官方文档说"[...] closer to queue head"给出任何订购保证时?
在任何情况下,消息A是否会在B之前排队?对我来说答案是肯定的,但我正在寻找建议 .
首先,我引用RabbitMQ docs中的以下文字:
当消息重新排队时,如果可能,它将被放置在其队列中的原始位置 . 如果不是(由于当多个消费者共享队列时同时传递和来自其他消费者的确认),该消息将被重新排队到更靠近队列头的位置 .
现在想象一下,在同一个队列中有两条消息(A和B),两个都没有被解包:当官方文档说"[...] closer to queue head"给出任何订购保证时?
在任何情况下,消息A是否会在B之前排队?对我来说答案是肯定的,但我正在寻找建议 .
1 回答
简短的回答是
如果A和B都被重新排队,并且
A最初是在B之前添加到队列中的
在A被重新排队并且B被重新排队之间,队列中没有活跃的消费者,
然后在重新排队后,A将始终放在队列中的B之前 .
见my answer here for explanation as to why these assumptions are necessary .