Spring JMS обмен сообщениями с JmsListener - как он масштабируется? - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь использовать 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 Ответ

0 голосов
/ 03 июля 2018

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

...