Как насчет того, если вы не вернетесь из метода слушателя onMessage (), пока ваша система не будет готова снова обрабатывать сообщения? Это помешает JMS доставить другое сообщение этому потребителю.
Это асинхронный эквивалент не вызова метода receive () в синхронном случае.
Для данного сеанса JMS нет многопоточности, поэтому конвейер сообщений задерживается до возврата метода onMessage ().
Я не знаком с последствиями динамического вызова setMessageListener (). Javadoc говорит, что есть неопределенное поведение , если вызывается "когда сообщения используются существующим слушателем или получателем синхронизации". Если вы звоните изнутри onMessage (), похоже, вы попали в этот неопределенный регистр.
Есть методы start / stop на уровне Соединения, если это не слишком грубо для вас.