2015-01-17 3 views
1

Я использую .NET RabbitMQ Client библиотеки. Я хочу разработать систему обмена сообщениями. Для этого я применил все необходимые методы RabbitMQ. Кроме того, я разработал dispose() для удаления очереди. Я вызываю этот метод в событии FormClosing, поэтому этот метод будет запущен, когда пользователь закроет приложение, нажав кнопку закрытия, и логическая очередь будет удалена. До этого весь код работает отлично.Удалить RabbitMQ Очередь, когда приложение закрыто аномально

Но моя проблема

Я не могу удалить очереди в момент закрытия приложения без нажатия на кнопку закрытия (давайте просто скажем, закрытие приложения из диспетчера задач или из командной строки используя команду taskkill или любые аномальные причины ), поскольку этот метод dispose() не будет запущен. В это время очередь не будет удалена, пока я не удалю ее из порта управления вручную.

Так что мой вопрос,

Как я могу знать, что приложение закрыто и что очередь сироты может быть удалена?

+2

Является ли это вариант для у вас есть привилегированная очередь? – pinepain

+0

Спасибо. @ zaq178miami – Pritam

ответ

3

RabbitMQ предоставляет API управления на основе REST, который позволяет обрабатывать создание/удаление очереди.

Что вы можете сделать - это запросить ваш API-интерфейс управления при запуске, чтобы узнать, оставлены ли какие-либо очереди из-за предыдущего неожиданного отключения или у вас может быть совершенно другая служба, которая отвечает за это (это дизайн выбор).

Вы можете опрашивать API управления через EasyNetQ Management API:

managementClient.DeleteQueue(queue); 

Вы можете найти полную документацию here.

Edit:

После этого некоторое чтение, возможно, эксклюзивный или Автоудален очередь будет достаточно?

Exclusive (используется только одно соединение и очереди будут удалены при том, что соединение закрывается)

Автоудален (очередь удаляется, когда последние потребительские отписывается)

+0

Спасибо за ваш ответ. Я создаю все очереди динамически. поэтому я не буду знать, какие очереди остались сиротами, а какие нет. Мне нужно выполнить это, когда объект RabbitMQ выйдет из его области. Еще раз спасибо за вашу помощь и усилия. – Pritam

+0

Почему бы не отслеживать созданные очереди, чтобы вы могли их проверить позже? –

+0

Он увеличивает накладные расходы клиента. Поэтому мне не разрешено отслеживать. – Pritam

Смежные вопросы