rabbitmq - RabbitMq 忽略 Channel.basicQos()
问题描述
我正在开发一个使用 RabbitMq 和 Micronaut(v1.1.3) 框架的应用程序,这个应用程序的目标是在队列中写入文件的路径。工作人员(RabbitListeners)使用队列并对指定的文件执行某些操作。这些操作可能很繁重,因此我不希望队列立即将消息分配给第一个可用的工作人员,以避免工作人员超载。我已经读到您需要设置“prefetch_count”以防止工人超载。问题是 channel.basicQos (1) 被完全忽略,因此队列中没有设置 prefetch_count。
@Singleton
public class ChannelPoolListener extends ChannelInitializer {
@Override
public void initialize(Channel channel) throws IOException {
channel.basicQos(1);
channel.exchangeDeclare("micronaut", BuiltinExchangeType.DIRECT, true);
channel.queueDeclare("log", true, false, false, null);
channel.queueBind("log", "micronaut", "log");
}
}
解决方案
在初始化程序中传递的通道不能保证在该范围之外使用。您需要在Queue
注释中设置预取。见https://micronaut-projects.github.io/micronaut-rabbitmq/latest/api/io/micronaut/configuration/rabbitmq/annotation/Queue.html#prefetch--
推荐阅读
- docker - 如何在 Kubernetes 上使用 Docker 运行 Jenkins?
- python - 分析日志文件时如何获得所有行的输出?
- android - 我的基本 Android 应用程序在闪屏后关闭
- javascript - 使用 ajax 结果作为带有 async/await 的变量
- python - 为什么 sorted() 函数在传递 3 个参数时说它只需要一个参数?
- sql - 甲骨文根据足球结果创建联赛表
- reactjs - 在 findOneDocument 与返回文档上的精益()之后调用精益() - 为什么在返回的文档上调用精益()不起作用?
- pari - 在 mac 上安装和使用 Pari/gp
- html - MatSidenav 中的 Angular Material UI 错误:无法设置未定义的属性“fixedTopGap”
- html - 您可以将 html 元描述添加到 django 博客文章模型吗?