首页 > 解决方案 > @RabbitListener 如何在注解中设置接收消息的频率

问题描述

我正在使用 @RabbitListner 注释从 RabbitMq 队列接收消息。如何使线程接收消息的频率不超过 1 秒?

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

标签: javaspringspring-bootrabbitmq

解决方案


你的任务有点奇怪。您不认为应该以不同的方式解决问题(也许您可以以一定的频率发送消息 - 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。


推荐阅读