【问题标题】:activemq amqp message order preservatonactivemq amqp 消息订单保存
【发布时间】:2019-08-21 13:32:32
【问题描述】:

我对这句话的模棱两可感到困惑:

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

如果您在单个队列上有多个消费者,消费者将竞争消息,ActiveMQ 将在它们之间进行负载平衡,因此顺序将会丢失。

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

是否不能保证来自 P1 的消息顺序会被 S1 以相同的顺序单独看到?

其他订阅者不一定会看到比 P1 实际发送的订单?)。

注意,我在这里通过 topic:// 谈论 jms pub/sub

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

我没想到会这样,但网站上的声明在这里给了我们一些担忧。

【问题讨论】:

  • 您使用的是哪个 ActiveMQ 代理?我假设您使用的是 5.x,但我想确认一下。
  • 版本 5.15 是

标签: activemq amqp


【解决方案1】:

文档其实很清楚:

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

由于您要询问主题,因此第一句话几乎为您确定了主题,对于主题,当有一个生产者时,订单将被保留。主题上的每个订阅者都会看到发送的每条消息,并按照发送的顺序查看它(除非任何基于优先级的重新排序)。只有当您谈论队列(而不是主题)时,排序才会变得更加复杂。

对于队列,您不再进行发布/订阅,而是在进行点对点操作,在这种情况下,多个订阅者会竞争来自队列的消息,因此您不再有订单保证,因为每个消费者都会获取一些消息,并且根据预取,它们会将它们分批接收,这是您无法预测的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2014-09-24
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多