Передача ClientProperties с параметром consumer_cancel_notify, установленным в false, в клиенте rabbitmq-do tnet - PullRequest
0 голосов
/ 12 марта 2020

Я использую asyn c Потребитель rabbitmq на основе rabbitmq-do tnet -клиент .

Вот упрощенный код

using (_channel = RabbitMqConnectionFactory.Connection.CreateModel())
{
    _channel.QueueDeclare(Constants.QueueName,
        durable: true,
        exclusive: false,
        autoDelete: false,
        arguments: null);

    _channel.BasicQos(0, 1, false);

    var consumer = new AsyncEventingBasicConsumer(_channel);

    consumer.Received += async (o, a) =>
    {
        await HandleMessageEvent(o, a);
    };

    string tag = _channel.BasicConsume(Constants.QueueName, false, consumer);

    while (IsWorking)
    {
        await Task.Delay(6000);
    }

    _channel.BasicCancel(tag);

    IsWorking = false;
}

Я хочу RabbitMQ сервер не отправлять ACK в ответ на сообщение BasicCancel.

Согласно документации , я могу передать параметр consumer_cancel_notify с помощью false значение в свойстве ClientProperties соединения, когда оно установлено.

Я пытаюсь сделать это с помощью такого кода.

public static ConnectionFactory GetRabbitMqConnectionFactory()
{

    Dictionary<string, bool> capabilities = new Dictionary<string, bool>
    {
        ["consumer_cancel_notify"] = false
    };

    var result = new ConnectionFactory
    {
        ContinuationTimeout = TimeSpan.FromSeconds(5),
        HostName = "localhost",
        UserName = "guest",
        Password = "guest",
        DispatchConsumersAsync = true,
        ClientProperties =
        {
            ["capabilities"] = capabilities
        },
    };

    return result;
}

Но это не работает, так как сервер все еще отправляет ACK на сообщение BasicCancel, которое я могу обработать с помощью ConsumerCancelled AsyncEventHandled.

Я использую RabbitMQ Server версии 3.8.3 и rabbitmq-do tnet -клиент версия 5.1.2.

Как передать параметр consumer_cancel_notify брокеру RabbitMQ?

...