MSMQ:是否可以按照发送消息的顺序使用消息?

MSMQ: Is it possible to consume the message in the same order as they were being sent?

假设我有一个队列 Q,Q 是消息的目的地。 我知道 MSMQ 保证事务中包含的 multi 消息的接收顺序与 他们是 sent.But 我的应用程序发送 每个交易一条消息 到 Q( 消息具有相同的目的地 )。当它达到 Q?

看看this Whosebug question。它确实引用了多个客户端,但 post 的内容可能对您有用。

是的,你应该没问题,尽管这可能取决于网络的不稳定程度。 MSMQ 使用内部确认消息来确保消息成功传递。重试机制将处理任何丢失的消息。根据重试 window 大小等因素,丢失的消息可能会延迟到后续消息之后。

我还可以想象一条消息可能先于另一条消息 - 例如,一条 1kb 的消息跟在一条 4MB 的消息之后 - 由于一条消息从网络堆栈保存到磁盘。

不过,这两种情况都是边缘情况。

最重要的是,在交易之外无法保证顺序,因此,如果您的应用依赖它,请确保消息包含某种序列号。

确保您的 servicebehaviour 装饰有 EnsureOrderedDispatch:=true

这里是 link 微软用

确认的

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/ordered-processing-of-messages-in-single-concurrency-mode