Динамическое масштабирование потребителя JMS при весенней загрузке

Я пытаюсь создать приложение для начальной загрузки, которое будет читать данные от производителя activeMQ. Я хочу, чтобы ресурсы, доступные клиенту, были оптимальными. В моем приложении весенней загрузки я хочу настроить несколько потребителей, и все эти потребители будут подключаться к одной очереди.

Это способ, которым я могу динамически увеличивать и уменьшать количество пользователей в приложении sprint-boot?

1 ответ

Решение

Потребители, о которых вы говорите, - это разные темы DefaultMessageListenerContainer или разные случаи DefaultMessageListenerContainer?

Вы можете динамически увеличивать и уменьшать количество потоков в DefaultMessageListenerContainer, изменяя

org.springframework.jms.listener.DefaultMessageListenerContainer.concurrentConsumers

а также

org.springframework.jms.listener.DefaultMessageListenerContainer.maxConcurrentConsumersсоответственно

ОБНОВИТЬ

если вы работаете с несколькими потребителями и / или потоками, вам нужно адаптировать prefetchPolicy.

persistent queues (default value: 1000)
non-persistent queues (default value: 1000)
persistent topics (default value: 100)
non-persistent topics (default value: Short.MAX_VALUE - 1)

все сообщения были отправлены первому подключенному потребителю, и при подключении другого он не получает сообщений, поэтому, чтобы изменить это поведение, если у вас есть одновременный потребитель для очереди, необходимо установить для prefetchPolicy более низкое значение, чем значение по умолчанию. например добавить это jms.prefetchPolicy.queuePrefetch=1 в конфигурации URI в activemq.xml или установить его на URL клиента, как это

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://172.16.143.99:61616?jms.prefetchPolicy.queuePrefetch=1");

Большие значения предварительной выборки рекомендуются для высокой производительности при больших объемах сообщений. Однако для меньших объемов сообщений, когда обработка каждого сообщения занимает много времени, предварительная выборка должна быть установлена ​​на 1. Это гарантирует, что потребитель обрабатывает только одно сообщение за раз. Однако указание предела предварительной выборки, равного нулю, приведет к тому, что потребитель будет опрашивать сообщения, по одному за раз, вместо того, чтобы сообщение было отправлено потребителю.

Взгляните на http://activemq.apache.org/what-is-the-prefetch-limit-for.html

А также

http://activemq.apache.org/destination-options.html

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