RabbitMQ отложено получить - PullRequest
1 голос
/ 02 июля 2019

Можно ли как-нибудь отложить прослушивание сообщений из какой-то определенной очереди в spring-amqp?

В моем случае использования у меня есть служба, которая должна прослушивать сообщения в двух очередях RabbitMQ. Первый предназначен исключительно для этой службы, второй используется для задач балансировки нагрузки несколькими экземплярами моей службы (работающими на разных машинах).

Мой сервис при установке получает конфигурацию через первую очередь и сам настраивается. Только после этой конфигурации разрешается обрабатывать «стандартные» задания из второй очереди - не раньше.

Как мне этого добиться? Использование @RabbitListener (queues = {queue1, queue2}) немедленно начинает прослушивание.

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

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 02 июля 2019

@RabbitListener имеет опцию autoStartup:

/**
 * Set to true or false, to override the default setting in the container factory.
 * @return true to auto start, false to not auto start.
 * @since 2.0
 */
String autoStartup() default "";

Полагаю, для вас было бы лучше иметь два отдельных @RabbitListener: один для очереди конфигурации, а другой не для autoStartup. Когда конфигурация будет готова, вам нужно получить контейнер для второго из RabbitListenerEndpointRegistry.getListenerContainer() и вызвать его start(). id, который вы также можете настроить в этот второй @RabbitListener:

/**
 * The unique identifier of the container managing for this endpoint.
 * <p>If none is specified an auto-generated one is provided.
 * @return the {@code id} for the container managing for this endpoint.
 * @see org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry#getListenerContainer(String)
 */
String id() default "";

См. Документацию для получения дополнительной информации: https://docs.spring.io/spring-amqp/docs/2.1.7.RELEASE/reference/html/#async-annotation-driven

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...