假设几个制作人发布到同一个交易所E(扇出)。每个制作人都有自己的频道。队列Q必须交换E.生成器P1将消息M1发布到E并从E接收确认A1。仅在确认A1之后,第二生成器P2发布第二消息M2。 RabbitMQ是否保证Q中的消息顺序:M1是第一个,M2是第二个?那将是订阅Q消费者总是收到M1并在那之后M2?
答案 0 :(得分:0)
RabbitMQ保证队列中消息的顺序:First In,First Out。进入队列的第一条消息将是从队列中出来的第一条消息,它们将保持有序(假设您正在消费并对它们进行处理...如果您开始解密/拒绝消息,请重新发布它们等等,事情发生了变化)
这是它对消息顺序的唯一保证:FIFO队列。
如果您需要保证邮件传递到队列的顺序,您必须自己构建该过程。
FWIW,很难建立这种保证。确保消息顺序的唯一真正保证的方法是在第一个消息处理完之后才发送下一个消息。
即使您在发送下一个发布者确认之前等待发布者确认,下一个也可能在第一个之前进入队列(尽管不太可能)。
如果您需要保证客户端按特定顺序获取消息,您可能需要查看Message Sequence和Resequencer。