В чем разница между MessageListener и потребителем в JMS?
Я новичок в JMS
. Насколько я понял ... --7-->Consumers
способны выбирать сообщения из очереди/тему. Так зачем вам нужен MessageListener
, потому что Consumers
будет знать, когда они получили сообщения? Каково практическое применение такого MessageListener
?
Edit:из Javadoc MessageListener:
объект MessageListener используется для асинхронной доставки сообщения.
каждый сеанс должен гарантировать, что он передает сообщения последовательно слушатель. Это означает, что прослушиватель назначен одному или нескольким потребителям из того же сеанса можно предположить, что метод onMessage не вызывается со следующим сообщением, пока сеанс не завершит последний вызов.
поэтому я путаюсь между использованием терминов асинхронно и серийно вместе. Как эти два термина соотносятся в описание функции MessageListener
?
3 ответов
разница в том, что MessageConsumer используется для синхронного приема сообщений:
MessageConsumer mc = s.createConsumer(queue);
Message msg = mc.receive();
для асинхронной доставки мы можем зарегистрировать объект MessageListener с потребителем сообщения:
mc.setMessageListener(new MessageListener() {
public void onMessage(Message msg) {
...
}
});
с docs:
на синхронно получение, клиент может запросить следующее сообщение от потребителя сообщения, используя один из его методов получения.
на асинхронные доставка, клиент может зарегистрировать MessageListener объект с потребителем сообщения.
одним из основных отличий, как за мои знания не указано в другие ответы, что MessageConsumer можете использовать MessageSelectors
и, следовательно, имеет возможность потреблять сообщения, которые его интересуют, где as MessageListener
будет прослушивать все сообщения.
из учебника J2EE doc http://docs.oracle.com/javaee/5/tutorial/doc/bnceh.html
селекторы сообщений JMS
Если приложению обмена сообщениями требуется отфильтровать сообщения, которые он получает, Вы можете использовать селектор сообщений API JMS, который позволяет потребителю сообщений указывать сообщения, которые его интересуют. Селекторы сообщений назначают работу фильтрации сообщений поставщику JMS, а не приложению.