Рассмотрим этот механизм очереди ответа RabbitMQ, в котором извлекается только 1 сообщение, отправляется обратно клиенту, а затем сгенерированная (автоудаляемая) очередь должна быть удалена.
строка startResponseConsumer (IModel? канал) { строка ReplyQueueName = канал.QueueDeclare().QueueName; вар потребитель = новый EventingBasicConsumer (канал); потребитель.Получено += (модель, шт.) => { if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out var tcs)) возвращаться; вар тело = ea.Body.ToArray(); вар ответ = Encoding.UTF8.GetString(тело); tcs.TrySetResult(ответ); }; Channel.BasicConsume(replyQueueName, true, потребитель); вернуть имя очереди ответа; } Работает, ответы на сообщения отправляются обратно клиенту, но очередь не удаляется. Вот что отображается в консоли после 10 вызовов.

Поэтому каждый раз, когда это вызывается, добавляется очередь. Они удаляются только при выходе, я думаю, когда канал удаляется.
Но это сервис, который должен работать постоянно, а не накапливать вечно очереди. Поэтому я добавил канал.Close() в полученное событие.
строка startResponseConsumer (IModel? канал) { строка ReplyQueueName = канал.QueueDeclare().QueueName; вар потребитель = новый EventingBasicConsumer (канал); потребитель.Получено += (модель, шт.) => { if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out var tcs)) возвращаться; вар тело = ea.Body.ToArray(); вар ответ = Encoding.UTF8.GetString(тело); tcs.TrySetResult(ответ); //добавлено для удаления очереди если (канал != по умолчанию) { канал.Закрыть(); канал = по умолчанию; } }; Channel.BasicConsume(replyQueueName, true, потребитель); вернуть имя очереди ответа; } Это не потокобезопасный вариант: канал, создаваемый для каждого потока, закрывается до того, как все сообщения будут обработаны.
Есть ли правильный способ удалить очередь автоматического удаления после получения сообщения?