После прочтения некоторого документа JMS я полностью озадачен фразой synchronous
и asynchronouns
.
Смотрите эту страницу: http://docs.oracle.com/cd/E19798-01/821-1841/bncdq/index.html
Синхронный
Вы используете метод приема для синхронного использования сообщения. Вы можете использовать этот метод в любое время после вызова метода start:
connection.start(); Message m = consumer.receive(); connection.start(); Message m = consumer.receive(1000); // time out after a second
Чтобы асинхронно использовать сообщение, вы используете прослушиватель сообщений, описанный в следующем разделе.
Асинхронный
Слушатели сообщений JMS Слушатель сообщений - это объект, который действует как асинхронный обработчик событий для сообщений. Этот объект реализует интерфейс MessageListener, который содержит один метод, onMessage. В методе onMessage вы определяете действия, которые необходимо предпринять, когда приходит сообщение.
Вы регистрируете прослушиватель сообщений с помощью определенного MessageConsumer с помощью метода setMessageListener. Например, если вы определяете класс с именем Listener, который реализует интерфейс MessageListener, вы можете зарегистрировать прослушиватель сообщений следующим образом:
Listener myListener = new Listener(); consumer.setMessageListener(myListener);
У меня есть два вопроса:
-
Как я понял, природа JMS асинхронна. Продюсер публикует сообщения в очередь/тему, ему не нужно ждать потребителя. Это асинхронное поведение. Как это может быть "синхронно"?
-
Если "mesageListener" асинхронен, но в моем тесте с spring -jms я нашел, что он всегда работает в потоке. Это означает, что если я пишу
Thread.sleep(2000)
вonMessage
, он должен ждать 2 секунды перед обработкой следующего сообщения. Это "асинхронно"?