RabbitListener выполняет задачу, когда в очереди нет сообщения

мы используем @RabbitListener для прослушивания очереди, и когда есть сообщения, мы их обрабатываем. Однако я хочу выполнить некоторую отчетную задачу, когда очередь пуста, это происходит, когда наше приложение только что обработало тонны сообщений в очереди, и какое-то время сообщений больше не было. это время я хочу сообщить. Как я могу сделать это с @RabbitListener?

вот мой код:

@RabbitListener(queues = "${consumer.queue}", containerFactory = "ListenerContainerFactory")
    public void handleMessage(Message message) {
        processEvent(message);
    }

person user468587    schedule 11.10.2015    source источник


Ответы (1)


Как я отвечал на ваш другой вопрос несколько недель назад, в AMQP нет механизма (и следовательно, Spring AMQP), чтобы уведомить потребителя о том, что в данный момент в очереди нет сообщений.

Мы могли бы изменить контейнер так, чтобы он запускал ApplicationEvent один раз, когда сообщение не найдено после обработки сообщений, но для этого потребуется модификация фреймворка. Ваш слушатель должен реализовать ApplicationListener, чтобы получить такое событие.

Не стесняйтесь открыть Новую функцию JIRA, если хотите, и мы, возможно, сможем посмотри на это.

person Gary Russell    schedule 11.10.2015
comment
Вы правы, я добавил дополнительное сообщение, чтобы отметить конец задания, и в прослушивателе кролика, как только он получает сообщение «завершение задания», он начинает сообщать. Я новичок в Spring AMQP и не уверен, что это обычная ситуация, требующая, чтобы слушатель кролика мог выполнять дополнительную работу, когда очередь пуста, но думаю, что было бы неплохо предоставить эту функцию. Спасибо! - person user468587; 12.10.2015