假设多个生产者发布到同一个交易所 E(扇出)。每个生产商都有自己的渠道。队列 Q 绑定到交换机 E。生产者 P1 向 E 发布消息 M1,并从 E 接收确认 A1。只有在确认 A1 后,第二个生产者 P2 才发布第二条消息 M2。 RabbitMQ 是否保证 Q 中消息的顺序:M1 是第一,M2 是第二?也就是说订阅Q的消费者总是会收到M1,然后收到M2吗?
RabbitMQ 保证队列中消息的顺序:先进先出。进入队列的第一条消息将是从队列中出来的第一条消息,并且它们将保持顺序(假设您只是使用并确认它们......如果您开始确认/拒绝消息,请重新发布它们等,事情发生变化)
这是它对消息顺序的唯一保证:先进先出队列。
如果您需要保证消息传递到队列的顺序,您必须自己构建该流程。
FWIW,建立这种保证非常困难。确保消息顺序的唯一真正有保证的方法是在第一个消息处理完成之前不要发送下一个消息。
即使您在发送下一个之前等待发布者确认,下一个也有可能在第一个之前进入队列(尽管这种情况极不可能)。
您可能想了解一下消息序列 http://www.enterpriseintegrationpatterns.com/patterns/messaging/MessageSequence.html and 重排序器 http://www.enterpriseintegrationpatterns.com/patterns/messaging/Resequencer.html如果你需要保证客户端按一定的顺序收到消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)