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

时间:2016-01-23 10:17:27

标签: c# .net msmq

假设我有队列Q,Q是消息的目的地。 我知道MSMQ保证交易中包含的消息按照相同的顺序接收 它们已被发送。但我的应用程序会向Q发送每封邮件一条消息 <具有相同目的地的消息。。消息订单在到达Q时仍然可以保留吗?

3 个答案:

答案 0 :(得分:0)

是的,你应该没问题,虽然这可能取决于网络有多么脆弱。 MSMQ使用内部ack消息来确保成功传递消息。重试机制将处理任何丢失的消息。取决于重试窗口大小等,可能有可能在以下消息之后延迟丢失的消息。

我还可以想象,一条消息可能先于另一条消息 - 例如,4MB消息后的1kb消息 - 由于消息从网络堆栈持久存储到磁盘所需的时间。

但这两种情况都是边缘情况。

底线是在交易之外无法保证订单,因此,如果您的应用依赖于它,请确保消息包含某种序列号。

答案 1 :(得分:0)

确保您的servicebehaviour已使用EnsureOrderedDispatch:=true

进行装饰

以下是Microsoft确认的链接

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

答案 2 :(得分:-1)

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