Обратите внимание, что JMS поставляется с 2 способами отправки сообщений: синхронный и асинхронный. Для начала, и если вашей программе не нужно ничего делать , если нет нового сообщения , попробуйте сначала синхронную диспетчеризацию . Вам не нужно создавать и устанавливать объект Listener:
consumer = queueSession.createConsumer(queue);
qc.start();
while( nummsgs<maxmsgs || maxmsgs==0 ) {
Message message = consumer.receive(1000); // receive the next message or wait up to 1 second, for example
if (message != null) {
nummsgs++;
... processing code ...
}
}
(я обычно хотел бы сделать условие завершения while основанным на входном параметре, таком как int maxmsgs = 0;
, чтобы вы могли автоматически останавливаться после обработки 100000 сообщений например, для тестирования производительности или просто укажите 0, чтобы он работал вечно).
В этом подходе нет ничего плохого, и поскольку код проще писать и понимать, я бы рекомендовал его в качестве подхода первого уровня , Основным l oop является просто MQ-диспетчер l oop, который имеет смысл, если это основная цель вашей программы.
Если ваша программа делает много вещей, одним из которых является получение MQ, асинхронная диспетчеризация может быть лучше. Основной l oop больше не имеет «MQ focus». Он просто сидит и ждет, пока кто-нибудь не нажмет Ctrl- C или не убьет программу.
consumer = queueSession.createConsumer(queue);
Listener listener = new Listener();
consumer.setMessageListener(listener);
qc.start();
Object waitLock = new Object();
while( nummsgs<maxmsgs || maxmsgs==0 ) {
synchronized(waitLock) {
waitLock.wait(1000); // wait up to 1 second, for example
}
}