Я использую 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?