假设几个生产者发布到同一个交易所E(扇出).每个制作人都有自己的频道.队列Q必须交换E.生成器P1将消息M1发布到E并从E接收确认A1.仅在确认A1之后,第二生成器P2发布第二消息M2.RabbitMQ是否保证Q中的消息顺序:M1是第一个,M2是第二个?那将是订阅Q消费者总是收到M1和那之后的M2?
RabbitMQ 保证队列中消息的顺序:先进先出。进入队列的第一条消息将是从队列中出来的第一条消息,并且它们将保持顺序(假设您只是使用并确认它们......如果您开始确认/拒绝消息,请重新发布它们等,事情发生变化)
这是它对消息顺序的唯一保证:先进先出队列。
如果您需要保证消息传递到队列的顺序,您必须自己构建该流程。
FWIW,建立这种保证非常困难。确保消息顺序的唯一真正有保证的方法是在第一个消息处理完成之前不要发送下一个消息。
即使您在发送下一个之前等待发布者确认,下一个也有可能在第一个之前进入队列(尽管这种情况极不可能)。
如果您需要保证客户端按特定顺序获取消息,您可能需要研究消息序列和重新排序器。
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |