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

本文关键字:消息 顺序 是否 MSMQ | 更新日期: 2023-09-27 18:31:43

假设我有一个队列Q,Q是消息的目的地。我知道 MSMQ 保证事务中包含的条消息的接收顺序与他们被派去了。但是我的应用程序每个事务向 Q 发送一条消息(消息具有相同的目的地)。消息顺序在到达 Q 时还能保留吗?

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

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

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

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

底线是,在事务之外不能保证订单,因此,如果您的应用程序依赖于它,请确保消息包含某种序列号。

确保您的servicebehaviourEnsureOrderedDispatch:=true装饰

这是确认Microsoft的链接

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

看看这个堆栈溢出问题。 它确实涉及多个客户,但帖子的内容可能对您有用。