activemq amqp消息顺序保留

时间:2019-03-31 01:58:57

标签: activemq amqp

我对此声明的含糊之处感到困惑:

http://activemq.apache.org/how-do-i-preserve-order-of-messages.html

  

如果您在单个队列中有多个使用者,则这些使用者将争夺消息,ActiveMQ将在它们之间进行负载平衡,因此订单将丢失。

这是否意味着如果我一个生产者(P1)发布单个主题(T1),并且有四个订阅者订阅该主题(S1,S2,S3,S4)。以上都是使用AMQP。

不能保证S1会以相同的顺序看到来自P1的消息顺序吗?

并且每个其他订户不一定会看到比实际发送的P1还要高的顺序吗?)。

注意,我在这里通过主题://

谈论jms pub / sub

[如果我添加更多的生产者,但每个生产者都有自己的主题队列,那还会影响其他队列的顺序吗?]

我不希望这样,但是网站上的声明在这里给了我们一些担忧。

1 个答案:

答案 0 :(得分:1)

文档实际上很清楚:

  

ActiveMQ将保留单个生产者发送给某个主题的所有消费者的消息顺序。如果队列中只有一个使用者,则也将保留由单个生产者发送的消息顺序。

由于您正在询问主题,因此第一句话几乎为您确定了主题,对于主题,在有一个生产者的情况下保留顺序。主题上的每个订阅者都可以看到发送的每个消息,并可以按照发送的顺序查看消息(不包括任何基于优先级的重新排序)。只有在谈论队列(不是主题)时,排序才会变得更加复杂。

对于队列,您不再进行发布/订阅,而正在点对点进行,在这种情况下,多个订户竞争队列中的消息,因此您不再有订单保证,因为每个消费者都将采取一些邮件,并且取决于预取,它们会分批处理一些无法预测的消息。