【发布时间】:2018-10-22 17:16:12
【问题描述】:
我在 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 。
如何解决这个问题?
【问题讨论】:
-
有什么证据表明 MDB 正在监听多个队列?
-
我将消息发送到 offlilneQueue 但在线消息侦听器想要处理。
-
您正在使用
@JMSDestinationDefinition的两个实例来定义两个队列,但它们都具有相同的destinationName(即application)。这对我来说似乎是错误的。此外,您的 MDB 正在使用名为application的@ActivationConfigProperty,这似乎也是错误的。这应该命名为destination。 -
Opss,对不起,我更新了关于属性名称(目的地)的帖子。
-
我很困惑!你说每个队列必须定义不同的目的地名称?
标签: java jms websphere-liberty open-liberty jms2