如何判断远程消息队列是否存在?该文档指出"存在"方法不适用于远程计算机.
以下是无效的(我知道队列路径是准确的,因为我能够将消息发送到队列):
if (!MessageQueue.Exists(@"FormatName:Direct=TCP:192.168.2.58\Private$\MyQueue")) throw new InvalidOperationException("Queue does not exist");
问题是将消息发送到其后没有侦听队列的网络地址不会导致异常.为无效的队列地址抛出异常对我们的应用程序至关重要.
有一篇文章是关于这个的:
Frank 的替代方法是利用 MSMQ 提供的其他功能,例如带有管理队列的否定确认消息。
应该发生的是:
- 消息将成功传递到目标队列
- 否定确认 (NACK) 将返回到管理队列,类别为“目标队列不存在”。(MQMSG_CLASS_NACK_BAD_DST_Q) 或者,您可以使用负源日志记录,并且在传送失败时,应该在相应的“死信消息”系统队列中看到相同类别的 NACK。
总之,不要检查队列是否存在,而是在发现队列不存在时处理消息未传递的情况。