Я пытаюсь использовать Spring JMS для обмена сообщениями с @JmsListener в масштабируемой форме, но я не вижу, чтобы это происходило. У меня есть компонент ConnectionFactory, который возвращает фабрику, которая подключается к Oracle Advanced Queue через JMS и пул источников данных базы данных.
Проблема начинается, когда каждый получатель @JmsListener снова подключается к JMS (и, следовательно, к пулу базы данных). Насколько я понимаю, у меня может быть много методов @JmsListener, по одному для каждой службы, но в этом смысле я очень ограничен.
Общее подключение включено, но поскольку каждый @JmsListener создает свой DefaultMessageListenerContainer, у каждого из них есть подключение к базе данных.
Если я также хочу, чтобы службы обрабатывали сообщения одновременно и устанавливал container.setConcurrency("3-5")
, то он открывает 3 * numberOfListeners
соединений.
Если я использую container.setCacheLevel(DefaultMessageListenerContainer.CACHE_NONE)
, то каждую секунду каждый контейнер слушателя подключается и отключается от JMS / базы данных.
Я хочу что-то, что подключается один раз (или более, если есть параллельные задания для обработки) к JMS / базе данных, чтобы не подключать время подсчета слушателя и не подключать-отключать каждую секунду для каждого слушателя.