【发布时间】:2020-12-05 16:27:06
【问题描述】:
这就是我所拥有的: 我们有 2 个应用程序,一个是生产的,一个是消费的。两者都在不同的 JVM 上运行。他们正在向持久主题发送消息并使用相同的 ClientId。
我想知道在 JMS 2.0 规范下是否允许以下操作,以及在 Artemis 中是否可以这样做。
- 在消费端,我有一个连接工厂。
- 我在实例化ActiveMQConnectionFactory bean时通过以下方法设置工厂的clientID:
.setClientId("clientId")和.setEnabledSharedClientId(true) - 然后我有一个 A 类,它在其参数中采用
ActiveMQConnectionFactory类型。在这个类中有一个 send 方法,它会检查连接是否存在,如果不存在,它会通过this.connectionFactory.createConnection();创建连接。 - 然后我有另一个类,其中包含
A对象类型。在这个类中有一个BlockingQueue数组。在每个元素中,它包含一个ArrayBlockingQueue。本质上,这个类的目的是创建不同的线程来消费来自 ArrayBlockingQueue 的消息,因为消息被放在它们上面。每个线程都从它的 arrayblcokingqueue 中读取,它也在它自己的线程中分配。
现在我的问题是 JMS 2.0 规范允许这样做吗?可以在从 ONE/SAME connectionFactory 创建的不同线程上创建连接吗?每个线程都应该有自己的 ClientID 吗?
【问题讨论】:
-
我的回答是否解决了您的问题?如果是这样,请将其标记为正确,以帮助将来可能有同样问题的其他人。如果没有,请详细说明缺少什么。谢谢!
标签: java jms activemq-artemis