Channel.basicQos() 被 rabbitMq 忽略

Channel.basicQos() ignored by rabbitMq

我正在开发一个使用 RabbitMq 和 Micronaut(v1.1.3) 框架的应用程序,这个应用程序的目标是在队列上写入文件的路径。工作人员 (RabbitListeners) 使用队列并对指定文件执行某些操作。这些操作可能很繁重,因此我不希望队列立即将消息分配给第一个可用的工作人员,以避免工作人员超载。我读到您需要设置 "prefetch_count" 以防止 worker 超载。 问题是 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--