Channel.basicQos () игнорируется rabbitMq - PullRequest
2 голосов
/ 11 июля 2019

Я разрабатываю приложение, которое использует 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");
    }
}

1 Ответ

1 голос
/ 16 июля 2019

Канал, переданный в инициализаторе, не имеет гарантий для использования вне этой области.Вам необходимо установить предварительную выборку в аннотации Queue.См. https://micronaut -projects.github.io / micronaut-rabbitmq / latest / api / io / micronaut / configuration / rabbitmq / annotation / Queue.html # prefetch -

...