Проверка наличия удаленного MessageQueue (с помощью C#)
Как я могу сказать, является ли удаленная очередь сообщений ? В документации указано, что метод" Exists " не работает для удаленных компьютеров.
следующее недопустимо (я знаю, что путь очереди точен, так как я могу отправлять сообщения в очередь):
if (!MessageQueue.Exists(@"FormatName:Direct=TCP:192.168.2.58Private$MyQueue")) throw new InvalidOperationException("Queue does not exist");
проблема в том, что отправка сообщения на сетевой адрес, за которым нет очереди прослушивания, не вызывает исключения. Наличие исключения для неверный адрес очереди имеет решающее значение для нашего приложения.
2 ответов
об этом есть статья:
альтернативный подход Фрэнка заключается в использовании других функций, которые MSMQ предоставляет, например, отрицательные сообщения подтверждения с очереди администрирования.
Что должно произойти, так это то, что:
- сообщение будет успешно доставлено в конечную очередь
- отрицательное подтверждение (NACK) будет возвращено в очередь администрирования с классом "Очередь назначения не существовать."(MQMSG_CLASS_NACK_BAD_DST_Q) в качестве альтернативы вы можете использовать отрицательный источник ведения журнала и, при сбое доставки, должен увидеть тот же класс NACK в соответствующей системе "сообщений с мертвой буквой" очередь.
В общем, не проверяйте, существует ли очередь, но вместо этого обрабатывайте недоставка сообщения, если окажется, что очередь не существовать.
Что делать, если удаленный Q контролировался третьей стороной, где у вас нет никакого контроля?
вам лучше иметь какие-то проверки таймаута вместо того, чтобы полагаться на удаленную информацию.