У меня есть определенное количество слушателей, работающих на каждом сервере, равном параллелизму слушателя. Ниже приведена конфигурация
<rabbit:listener-container
connection-factory="rabbitConnectionFactory" concurrency="${compute.listener.concurrency}"
requeue-rejected="false" prefetch="1">
<rabbit:listener queues="${compute.queue}" ref="computeListener"
method="run" />
</rabbit:listener-container>
Есть ли способ добавить/удалить количество слушателей на любом сервере во время выполнения, когда моя работа выполняется без внесения изменений в этот параметр и повторного развертывания приложения?
Может быть, какой-то инструмент командной строки для добавления/удаления числа пользователей во время выполнения?
Вы можете сделать это вручную: SimpleMessageListenerContainer.setConcurrentConsumers()/setMaxConcurrentConsumers()
, необходимо указать id
для элемента <rabbit:listener>
. И используя его, вы можете получить компонент из контекста приложения и вызвать эти методы с соответствующими значениями.
Нет никакого специального средства, чтобы сделать это извне.
Однако вы можете это сделать, например, с помощью Spring Integration <int-stream:stdin-channel-adapter>
. Или напишите некоторый @ManagedResource
и @ManagedResource
его в JMX с @@ManagedAttribute
чтобы изменить эти значения для базового SimpleMessageListenerContainer