Как удалить очередь ответов с помощью 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#»