JMS 2 MDB прослушивает несколько очередей
Я использую JavaEE 8 на Liberty 18.0.0.2 .
Я настраиваю конфигурацию активации 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 только слушать онлайн Queue .
Как можно решить эту проблему?
1 ответ
У вас есть два разных @JMSDestinationDefinition
, Один имеет name
из java:app/onlineQueue
, а другой имеет имя java:app/offlineQueue
, Тем не менее, оба они имеют destinationName
приложения, которое мне кажется неправильным. Смотрите ли вы java:app/onlineQueue
или же java:app/offlineQueue
в JNDI вы получите ссылку на пункт назначения с именем application
, Это почти наверняка, почему сообщения отправляются java:app/offlineQueue
подобраны MDB.