gpt4 book ai didi

java - JMS 2 MDB 监听多个队列

转载 作者:行者123 更新时间:2023-11-30 10:10:12 27 4
gpt4 key购买 nike

我在 Liberty 18.0.0.2 上使用 JavaEE 8。
我像这样设置 jms 激活配置 (server.xml):

  <messagingEngine>
<queue id="application" />
</messagingEngine>
<jmsActivationSpec id="app/appMDB">
<properties.wasJms destinationRef="java:app/onlineQueue" />
</jmsActivationSpec>

这是我的简单 MDB 消息监听器:

@MessageDriven(
name = "appMDB",
mappedName = "java:app/onlineQueue",
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = "java:app/onlineQueue")
}
)
public class ApplicationMessageListener implements MessageListener {
...
}

我还定义了两个这样的队列:

@Stateless
@JMSDestinationDefinitions(
value = {
@JMSDestinationDefinition(
name = "java:app/onlineQueue",
interfaceName = "javax.jms.Queue",
destinationName = "application"),
@JMSDestinationDefinition(
name = "java:app/offlineQueue",
interfaceName = "javax.jms.Queue",
destinationName = "application")
}
)
public class MessageService {

@Inject
private Logger logger;

@Resource(lookup = "java:app/onlineQueue")
private Queue onlineQueue;

@Resource(lookup = "java:app/offlineQueue")
private Queue offlineQueue;

@Inject
private JMSContext context;

@EJB
private MessageUtils messageUtils;

public void sendToOnlineQueue(SimpleMessage simpleMessage) {
TextMessage message = messageUtils.createTextMessage(simpleMessage);
logger.info("Send online Message : " + simpleMessage);
JMSProducer producer = context.createProducer();
producer.send(onlineQueue, message);
}

public void sendToOfflineQueue(SimpleMessage simpleMessage) {
TextMessage message = messageUtils.createTextMessage(simpleMessage);
logger.info("Send offline Message : " + simpleMessage);
JMSProducer producer = context.createProducer();
producer.send(offlineQueue, message);
}
}

我的问题是 MDB 监听多个队列。
我希望 mdb 只听 onlineQueue 。
如何解决这个问题?

最佳答案

您有两个不同的@JMSDestinationDefinition。一个的 namejava:app/onlineQueue,另一个的名称为 java:app/offlineQueue。但是,它们都有 destinationName 应用程序,这对我来说似乎是错误的。无论您是在 JNDI 中查找 java:app/onlineQueue 还是 java:app/offlineQueue,您都将获得对名为 application 的目标的引用。这几乎可以肯定是 MDB 接收发送到 java:app/offlineQueue 的消息的原因。

关于java - JMS 2 MDB 监听多个队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52934548/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com