java - @RabbitListener 如何在注解中设置接收消息的频率
问题描述
我正在使用 @RabbitListner 注释从 RabbitMq 队列接收消息。如何使线程接收消息的频率不超过 1 秒?
@RabbitListener(queues = "message", priority = "3",concurrency = "2")
public void receiveCheck(RequestMessage message){
}
解决方案
你的任务有点奇怪。您不认为应该以不同的方式解决问题(也许您可以以一定的频率发送消息 - 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。
推荐阅读
- internet-explorer - Internet Explorer 在矩阵变换时扭曲 SVG 图像
- python - 从 Quora 问题中抓取答案仅返回 10 个答案
- reactjs - 如何用 jest 和 react-testing-library 测试 react-toastify
- amazon-web-services - 如何创建映射模板以将路径参数映射到 apigateway 中的 lambda 函数?
- python - 如何在 multiprocessing.Pool 中的函数运行中使用模拟
- typescript - Promise.then 回调中的打字稿错误
- c# - 从电子表格中获取单元格值
- mysql - SQL 选择 ID 然后在更新中使用该 ID
- ruby-on-rails - 无法自动加载常量错误 - Rails
- deprecated - 如何在 github 操作中重构已弃用的 set-env