ActiveMQ主题上的并行消息使用情况

时间:2017-11-09 01:01:25

标签: java multithreading activemq activemq-artemis

似乎ActiveMQ中的持久主题(这似乎是JMS本身的障碍)只有一个消费者可以在订阅者身上活跃。

即,在ActiveMQ文档中:

  

使用唯一的JMS创建JMS持久订阅者MessageConsumer   clientID和持久订户名称。仅符合JMS一个JMS   连接可以在任何时间点为一个JMS clientID激活,   并且只有一个消费者可以为clientID和订阅者激活   名称。即,只有一个线程可以从给定的主动消耗   逻辑主题订阅者。

然而,其他排队系统(看起来像Azure Service Bus这样,根据文档),似乎很容易允许多个线程"订阅者"在一个"订阅"。在这个时代,人们会认为这是一个给定的。

为什么会这样?这是否会在未来版本的JMS和/或ActiveMQ中得到解决?

P.S。好像"虚拟主题" (上面引用的文档)对于这种情况来说是一个不那么理想且不那么高效的解决方法,因为它似乎在后台为每个订阅者创建一个完全独立的队列。

1 个答案:

答案 0 :(得分:4)

  

为什么会这样?

您引用的文档说明了为什么会这样 - 符合JMS标准。需要说明的是,此处的JMS合规性为1.1版。 JMS 2.0引入了#34;共享"耐用订户

  

这是否会在JMS和/或ActiveMQ的未来版本中得到解决?

ActiveMQ 5.x仅实现JMS 1.1,并且我没有意识到添加对JMS 2.0的支持的计划。但是,ActiveMQ Artemis(在更现代,更高性能的核心之上构建的ActiveMQ标题下的另一个代理)确实支持JMS 2.0(以及其他协议)。

对于它的价值,在具有队列的代理中实现订阅并不一定存在性能问题。这就是ActiveMQ Artemis所做的,它具有非常好的性能。