这是场景:
2 台机器:“机器 A”和“机器 B”。
假设它们对应的 IP 地址是 192.168.0.100(对于 A)和 192.168.0.200(对于 B)。两台机器上都安装了 MSMQ,在 Windows Server 2008 上。
机器A
已配置以下队列:private$\aaa
、事务性。
该队列有一个消费者,它包装Read
MSMQ 事务中的每个操作,并且仅从“当前”消息中读取(即,不使用游标操作)。
机器 B
有一个将消息发送到的应用程序FormatName:direct=os:192.168.0.100\private$\aaa
。每条Send
消息都包装在一个 MSMQ 事务中,带有(C# 中的代码):
TimeToReachQueue = Message.InfiniteTimeout
和
TimeToBeReceived = Message.InfiniteTimeout
还有……问题
在这种场景和配置下private$\aaa
,是从 B 发送到 A 的消息:
- 交付一次?我的意思是,我是否必须在机器 A 上的消费者应用程序中确保“当前”消息实际上是“新的”(也就是说,之前没有处理过)?还是 MSMQ 本身会处理这个问题?我知道这听起来有点傻,因为这是一个队列,对吧?!但是我找不到一个具体的参考资料声称这些消息是有序的。我见过这样的说法,但不是来自微软官方资源。
- 为了?我的意思是,是否有可能
M1
由于网络问题,无法从 B 向 A 发送消息,然后,也许网络恢复正常,并且以下消息,M2
成功发送到机器 A?
非常感谢!