【问题标题】:@RabbitListener how to set frequency of receiving messages in annotation@RabbitListener 如何在注解中设置接收消息的频率
【发布时间】:2020-12-12 15:00:41
【问题描述】:
我正在使用 @RabbitListner 注释从 RabbitMq 队列接收消息。
如何让线程接收消息的频率不超过 1 秒?
@RabbitListener(queues = "message", priority = "3",concurrency = "2")
public void receiveCheck(RequestMessage message){
}
【问题讨论】:
标签:
java
spring
spring-boot
rabbitmq
【解决方案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。