Spring JMS обмен сообщениями с JmsListener - как он масштабируется?

Я пытаюсь использовать 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/ базе данных, чтобы не подключать время подсчета слушателя и не подключать-отключать каждую секунду для каждого слушателя.

1 ответ

Вы можете использовать SingleConnectionFactory обернуть фабрику поставщика и все контейнеры будут использовать одно и то же соединение.

Другие вопросы по тегам