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