似乎ActiveMQ中的持久主题(这似乎是JMS本身的障碍)只有一个消费者可以在订阅者身上活跃。
即,在ActiveMQ文档中:
使用唯一的JMS创建JMS持久订阅者MessageConsumer clientID和持久订户名称。仅符合JMS一个JMS 连接可以在任何时间点为一个JMS clientID激活, 并且只有一个消费者可以为clientID和订阅者激活 名称。即,只有一个线程可以从给定的主动消耗 逻辑主题订阅者。
然而,其他排队系统(看起来像Azure Service Bus这样,根据文档),似乎很容易允许多个线程"订阅者"在一个"订阅"。在这个时代,人们会认为这是一个给定的。
为什么会这样?这是否会在未来版本的JMS和/或ActiveMQ中得到解决?
P.S。好像"虚拟主题" (上面引用的文档)对于这种情况来说是一个不那么理想且不那么高效的解决方法,因为它似乎在后台为每个订阅者创建一个完全独立的队列。
答案 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所做的,它具有非常好的性能。