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

C# MSMQ:是否可以按照发送消息的相同顺序使用消息?,c#,.net,msmq,C#,.net,Msmq,假设我有一个队列Q,Q是消息的目的地。 我知道MSMQ保证事务中包含的多条消息以相同的顺序接收 它们已被发送。但我的应用程序将每个事务发送一条消息到具有相同目的地的Qmessages。当消息到达Q时,其顺序是否仍能保留?请查看。它确实涉及多个客户端,但文章的内容可能对您有用。是的,您应该可以,尽管这可能取决于网络的脆弱程度。MSMQ使用内部ack消息确保消息成功传递。重试机制将处理任何丢失的消息。根据重试窗口大小等,丢失的消息可能会延迟到以下消息之后 我还可以想象,由于消息从网络堆栈持久化到磁盘

假设我有一个队列Q,Q是消息的目的地。 我知道MSMQ保证事务中包含的多条消息以相同的顺序接收
它们已被发送。但我的应用程序将每个事务发送一条消息到具有相同目的地的Qmessages。当消息到达Q时,其顺序是否仍能保留?

请查看。它确实涉及多个客户端,但文章的内容可能对您有用。

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

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

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

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

确保您的服务行为与EnsureOrderedDispatch:=true解除关联

这是微软确认的链接


如果这个问题是重复的,那么你将其标记为重复。如果你想回答,那么你应该把细节放在你的答案中,并链接到另一个问题,以支持你已经写的内容。否则,这只是一条评论,应该放在问题下方的评论中。当时没有足够的代表发表评论!:。我不认为这是直接复制,只是类似。你的意思是,如果网络可靠,那么每个事务可以按顺序接收一条消息??当网络不可靠时,如果重试失败,则无法保证顺序?通常传出队列将像管道一样工作,消息将按顺序传递。您的应用程序将能够按照它们到达队列的顺序读取它们。但您需要确定一条消息被无序处理的影响和风险。如果它会让你损失一百万美元,那么你可能想要实现你自己的保证订购系统。例如,使用Acknowledgets-应用程序在发送消息M+1之前等待消息M的传递确认返回给发送方。