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

时间:2009-06-18 01:29:53

标签: c# msmq

如何判断远程消息队列exists?该文档指出“存在”方法不适用于远程计算机。

以下内容无效(我知道队列路径准确,因为我能够向队列发送消息):

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

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

2 个答案:

答案 0 :(得分:3)

有一篇关于此的文章:

  

弗兰克的替代方法是利用其他功能   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

答案 1 :(得分:0)

如果远程Q由您没有任何控制权的第三方控制怎么办?

您最好进行某种超时检查,而不是依赖远程信息。