2

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

也就是说,在 ActiveMQ 文档中:

JMS 持久订阅者 MessageConsumer 是使用唯一的 JMS 客户端 ID 和持久订阅者名称创建的。要符合 JMS,对于一个 JMS clientID,在任何时间点只能有一个 JMS 连接处于活动状态,并且对于一个 clientID 和订阅者名称,只有一个使用者可以处于活动状态。即,只有一个线程可以从给定的逻辑主题订阅者主动消费。

然而,其他排队系统(看起来像 Azure 服务总线这样做,基于文档),似乎很容易允许单个“订阅”上的多个线程“订阅者”。在这个时代,人们会认为这是理所当然的。

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

PS对于这种情况,“虚拟主题”(上面引用的文档)似乎不是那么理想且性能不佳的解决方法,因为它似乎在后台为每个订阅者创建了一个完全独立的队列。

4

1 回答 1

5

为什么会这样?

您引用的文档说明了为什么会出现这种情况 - 符合 JMS。需要明确的是,这里的 JMS 合规性是 1.1 版。JMS 2.0 引入了“共享”持久订阅者

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

ActiveMQ 5.x 仅实现 JMS 1.1,据我所知没有计划添加对 JMS 2.0 的支持。但是,ActiveMQ Artemis(ActiveMQ 旗下的另一个代理,建立在更现代、更高性能的核心之上)确实支持 JMS 2.0(以及其他协议)。

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

于 2017-11-09T03:21:10.947 回答