Динамическое масштабирование потребителя 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
А также