ActiveMQ 主题上的并行消息消费

Parallel message consumption on ActiveMQ topic

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

也就是说,在 ActiveMQ 文档中:

A JMS durable subscriber MessageConsumer is created with a unique JMS clientID and durable subscriber name. To be JMS compliant only one JMS connection can be active at any point in time for one JMS clientID, and only one consumer can be active for a clientID and subscriber name. i.e., only one thread can be actively consuming from a given logical topic subscriber.

然而,其他排队系统(根据文档,看起来 Azure 服务总线就是这样做的)似乎很容易允许在单个 "subscription" 上使用多个线程 "subscribers"。在这个时代,人们会认为这是理所当然的。

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

P.S。对于这种情况,"Virtual Topics"(上面引用的文档)似乎是一个不太理想且性能不佳的解决方法,因为它似乎在后台为每个订阅者创建了一个完全独立的队列。

Why is this the case?

您引用的文档说明了为什么会出现这种情况 - 与 JMS 兼容。需要明确的是,这里的 JMS 遵从版本 1.1。 JMS 2.0 引入了 "shared" 个持久订阅者

Is this going to be resolved in future versions of JMS and/or ActiveMQ?

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

就其价值而言,在具有队列的代理中实现订阅不一定存在性能问题。 ActiveMQ Artemis 就是这样做的,而且性能非常好。