如何判断远程消息队列exists?该文档指出“存在”方法不适用于远程计算机。
以下内容无效(我知道队列路径准确,因为我能够向队列发送消息):
if (!MessageQueue.Exists(@"FormatName:Direct=TCP:192.168.2.58\Private$\MyQueue")) throw new InvalidOperationException("Queue does not exist");
问题是将消息发送到后面没有侦听队列的网络地址不会导致异常。为无效的队列地址抛出异常对我们的应用程序至关重要。
答案 0 :(得分:3)
有一篇关于此的文章:
弗兰克的替代方法是利用其他功能 MSMQ提供了诸如否定确认消息 行政队列。
应该发生的是:
- 邮件将成功传递到目标队列
- 否定确认(NACK)将返回给 管理队列,类为“目标队列没有 存在。“(MQMSG_CLASS_NACK_BAD_DST_Q)或者你可以使用 负面的日志记录,如果没有交付,应该看到 相应的“死信消息”系统中的同类NACK 队列中。
总之,不要检查队列是否存在,而是检查队列 如果结果是队列没有,则不传递消息 存在。
答案 1 :(得分:0)
如果远程Q由您没有任何控制权的第三方控制怎么办?
您最好进行某种超时检查,而不是依赖远程信息。