Spring JMS в сервере приложений Wildfly
Я использую Spring-Boot-WAR, развернутый в Wildfly 14, и реализовал JmsListener, который подключен к очереди. JmsListener установил параллелизм на 5, и когда Spring-App запускается автономно, я вижу 5 параллельно работающих слушателей. Но в сочетании с Wildfly 14 работает только 1 слушатель.
В JEE я бы аннотировал MessageDrivenBean с помощью @Pool, а затем мог бы настроить максимальный размер пула для данного пула. Но я думаю, что Spring-Listener просто подключается к пулу MDB по умолчанию, размер которого равен 1.
Есть ли способ подключить JmsListener к конкретному пулу экземпляров bean-экземпляров? Или есть другой способ определить индивидуальный максимальный размер пула для этого JmsListener?
standalone.xml
JmsListener
@JmsListener(destination = JMS_MESSAGE_NAME, concurrency = "5")
public void receiveFromMessageQueue(Message msg) {
...
}
1 ответ
На сервере приложений JEE спецификация JCA ограничивает количество сеансов JMS в соединении JMS до одного. В вашем развертывании Spring Boot у вас есть 5 одновременных потребителей в JmsListener. Это достигается наличием 5 сеансов JMS в одном соединении JMS, которым управляет контейнер прослушивателя Spring JMS.
Если вы создаете свою собственную фабрику соединений (не используя фабрики соединений Wildfly JCA), вы можете иметь несколько сеансов на одно соединение.