测试是否存在远程MessageQueue(使用C#)

use*_*166 7 c# msmq

如何判断远程消息队列是否存在?该文档指出"存在"方法不适用于远程计算机.

以下是无效的(我知道队列路径是准确的,因为我能够将消息发送到队列):

if (!MessageQueue.Exists(@"FormatName:Direct=TCP:192.168.2.58\Private$\MyQueue"))
  throw new InvalidOperationException("Queue does not exist");

问题是将消息发送到其后没有侦听队列的网络地址不会导致异常.为无效的队列地址抛出异常对我们的应用程序至关重要.

Tet*_*ron 3

有一篇文章是关于这个的:

Frank 的替代方法是利用 MSMQ 提供的其他功能,例如带有管理队列的否定确认消息。

应该发生的是:

  • 消息将成功传递到目标队列
  • 否定确认 (NACK) 将返回到管理队列,类别为“目标队列不存在”。(MQMSG_CLASS_NACK_BAD_DST_Q) 或者,您可以使用负源日志记录,并且在传送失败时,应该在相应的“死信消息”系统队列中看到相同类别的 NACK。

总之,不要检查队列是否存在,而是在发现队列不存在时处理消息未传递的情况。

http://blogs.msdn.com/johnbreakwell/archive/2008/07/31/checking-if-msmq-queues-exist-is-hard-work-so-should-you-bother.aspx