@RabbitListener как установить частоту получения сообщений в аннотации

#java #spring #spring-boot #rabbitmq

#java #весна #весенняя загрузка #rabbitmq

Вопрос:

Я использую аннотацию @RabbitListner для получения сообщений из очереди RabbitMQ. Как заставить потоки получать сообщения не чаще 1 секунды?

 @RabbitListener(queues = "message", priority = "3",concurrency = "2")
public void receiveCheck(RequestMessage message){
}
 

Ответ №1:

Ваша задача немного странная. Не кажется ли вам, что проблему следует решать по-другому (возможно, вы можете отправлять сообщения с определенной частотой — 1 сообщение / сек)? Но если вы уверены, что это то, что вам нужно, вы могли бы использовать примитивное решение:

 @RabbitListener(queues = "message", priority = "3", concurrency = "2")
public void receiveMessage(String message) throws InterruptedException {
    System.out.println("Received <"   message   ">"   " Message time: "   LocalDateTime.now());
    Thread.sleep(1000);
}
 

Или с вычислением времени работы:

 @RabbitListener(queues = "message", priority = "3", concurrency = "2")
public void receiveMessageWithTimer(String message) throws InterruptedException {
    long start = System.currentTimeMillis();
    System.out.println("Received <"   message   ">"   " Message time: "   LocalDateTime.now());
    long finish = System.currentTimeMillis();
    long operationTime = finish - start;
    Thread.sleep(1000 - operationTime);
}
 

Но в этом случае вы должны помнить, что уровень параллелизма = 2. И вы будете получать 2 сообщения в секунду.
Для получения только одного сообщения вы можете установить уровень параллелизма = 1.