2009-06-18 42 views
7

如何判断远程消息队列exists?该文档指出“Exists”方法不适用于远程机器。测试远程MessageQueue是否存在(使用C#)

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

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

的问题是,发送消息到不支持网络地址在它后面有一个监听队列不会导致异常。抛出无效队列地址的异常对我们的应用程序至关重要。

回答

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

0

如果远程Q由不受任何控制的第三方控制,该怎么办?

你最好有一些超时检查,而不是依赖于远程信息。