【发布时间】:2020-03-24 14:50:30
【问题描述】:
软件:
- Apache Artemis 2.10.1
- TomEE plus 8.0
我创建了一个有 2 个消费者的主题。每个消费者每个都有 1 个 MDB。我有一种主要的方法来进行配置和所有操作。
尽管我只发送一条消息并指定这是一个共享订阅,但两个 MDB 都会使用该消息。不知道如何解决这个问题。当然没有错误。但这不是我的代码所期望的功能。
@MessageDriven(name = "TOPICMDB1", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "BTOPIC"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "mytopic"),
@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "durable"),
@ActivationConfigProperty(propertyName = "shareSubscriptions", propertyValue="true"),
@ActivationConfigProperty(propertyName = "clientId", propertyValue = "MyClientId_1")
})
@MessageDriven(name = "TOPICMDB2", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "CTOPIC"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "mytopic"),
@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "durable"),
@ActivationConfigProperty(propertyName = "shareSubscriptions", propertyValue="true"),
@ActivationConfigProperty(propertyName = "clientId", propertyValue = "MyClientId_2")
})
connectionFactory = new ActiveMQConnectionFactory(input.getUrl());
connection = (ActiveMQConnection) connectionFactory.createConnection(input.getUsername(), input.getPassword());
session = connection.createTopicSession(input.isTransacted(), Session.AUTO_ACKNOWLEDGE);
connection.start();
session = connection.createTopicSession(true, Session.SESSION_TRANSACTED);
destination = session.createTopic("ATOPIC");
consumer = session.createSharedDurableConsumer( (Topic) destination, "mytopic");
rtn = consumer.receive();
session.commit();
我不确定我为什么要在 mytopic(订阅名称)上创建这个共享持久消费者。我尝试了各种不同的方法来完成我的任务。
tomee.xml:
<Resource id="ATOPIC"
class-name="org.apache.activemq.artemis.api.jms.ActiveMQJMSClient"
constructor="name"
factory-name="createTopic"
type="javax.jms.Topic">
name=ATOPIC
</Resource>
broker.xml:
<address name = "ATOPIC">
<multicast>
<queue name = "BTOPIC"/>
<queue name = "CTOPIC"/>
</multicast>
</address>
【问题讨论】:
-
更新了问题。请检查。我不确定为什么要在 mytopic(订阅名称)上创建共享的持久 cnsumer。我正在尝试各种不同的方法来完成我的任务。是的,MDB1 正在听 BTopic,而 MDB2 正在听 CTopic。但是 Btopic 和 Ctopic 都在同一个地址队列上。更新我的实际问题。
-
感谢您更好地表达我的问题,请帮我解决这个问题。
标签: activemq-artemis jms2