Как удалить очередь ответов с помощью RabbitMQ?C#

Место общения программистов C#
Ответить
Anonymous
 Как удалить очередь ответов с помощью RabbitMQ?

Сообщение Anonymous »


Рассмотрим этот механизм очереди ответа 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, потребитель); вернуть имя очереди ответа; } Это не потокобезопасный вариант: канал, создаваемый для каждого потока, закрывается до того, как все сообщения будут обработаны.

Есть ли правильный способ удалить очередь автоматического удаления после получения сообщения?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»