【问题标题】:ActiveMQ Artemis JMS Shared SubscriptionActiveMQ Artemis JMS 共享订阅
【发布时间】:2021-06-09 01:56:07
【问题描述】:

我有一个单节点 ActiveMQ 实例,其中两个竞争消费者连接到一个主题。根据 JMS 2.0 规范共享主题订阅。共享订阅确实保证只有两个订阅者(使用相同的订阅名称)才能收到消息。但我注意到的是,它不能保证只有在第一条消息被确认时才会传递第二条消息。如果第一个消费者需要时间来确认消息,则即使在消费者将第一个消息的确认发送给代理之前,第二个消息也会传递给免费消费者。这是标准行为吗?有没有办法阻止代理在确认第一条消息之前传递第二条消息?

【问题讨论】:

  • 您看到的是标准行为。将共享订阅添加到规范中的主要原因之一(如果不是唯一原因)是允许负载平衡。如果严格执行命令,那将首先破坏负载平衡的目的。并发处理总是会引入乱序处理的可能性。

标签: redhat activemq-artemis amq


【解决方案1】:

ActiveMQ Artemis 允许exclusive queues。它们是特殊的队列,一次只将所有消息路由到一个消费者。 显然,独占队列有一个缺点,即您无法扩展消费者以改善消费,因为从技术上讲,只有一个消费者是活跃的。

但是,我建议您查看message grouping 以扩展您的解决方案。当您希望同一消费者连续处理具有特定属性值的所有消息而不停止将具有不同属性值的消息传递给其他消费者时,消息组很有用。

【讨论】:

  • 集群不支持独占队列。是否可以选择在集群中使用独占队列?
  • 您的问题是说您有“单节点 ActiveMQ 实例”,不是吗?您已经在this question 中询问了有关在集群中订购的问题。
猜你喜欢
  • 1970-01-01
  • 2019-09-30
  • 2020-11-18
  • 2020-10-20
  • 2014-10-06
  • 1970-01-01
  • 2020-06-23
  • 2016-07-11
  • 1970-01-01
相关资源
最近更新 更多