В чем разница между MessageListener и Потребителем в JMS?

Я новичок в JMS. Насколько я понял, Consumers способны собирать сообщения из очереди/темы. Итак, зачем вам MessageListener, потому что Consumers будет знать, когда они получили сообщения? Каково практическое использование такого MessageListener?

Изменить: Из Javadoc of MessageListener:

Объект MessageListener используется для получения асинхронной доставки сообщения.

Каждый сеанс должен гарантировать, что он последовательно передает сообщения слушатель. Это означает, что слушатель, назначенный одному или нескольким потребителям того же сеанса может предположить, что метод onMessage не вызывается со следующим сообщением, пока сеанс не завершит последний вызов.

Поэтому я смущен между использованием терминов асинхронно и последовательно. Как эти два члена связаны с описанием функции MessageListener?

Ответ 1

Различие заключается в том, что MessageConsumer используется для синхронного приема сообщений:

MessageConsumer mc = s.createConsumer(queue);
Message msg = mc.receive();

Для асинхронной доставки мы можем зарегистрировать объект MessageListener с потребителем сообщения:

mc.setMessageListener(new MessageListener() {
    public void onMessage(Message msg) {
        ...
    }
});

Ответ 2

из docs:

При получении синхронной клиент может запросить следующее сообщение от потребителя сообщения, используя один из его методов приема.

Для доставки асинхронной клиент может зарегистрировать объект MessageListener с потребителем сообщения.

Ответ 3

Одно существенное различие в моих знаниях, не упомянутых в других ответах, заключается в том, что MessageConsumer может использовать MessageSelectors и, следовательно, имеет возможность потреблять сообщения, которые ему интересны, где MessageListener будет прослушивать все сообщения.

Из учебника J2EE doc http://docs.oracle.com/javaee/5/tutorial/doc/bnceh.html

Селектор сообщений JMS
 Если ваше приложение для обмена сообщениями должно фильтровать полученные им сообщения, вы можете использовать селектор сообщений JMS API, который позволяет потребителю сообщения указывать интересующие сообщения. Селекторы сообщений назначают работу по фильтрации сообщений поставщику JMS, а не приложения.