#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.