我们正在使用NService总线作为我们的消息传递框架。有时候消息并不像发送序列那样。有时候最后一条消息是先来的,而不是后面的第一条消息。
请帮助我谢谢
答案 0 :(得分:3)
NServiceBus的性质并不保证将按照发送的顺序接收消息。每条消息都要独立处理。
如果某个操作只能在两条相关邮件到达后才能执行,那么您需要使用Saga
编辑以回复第一条评论:
你提到你正在以块的形式发送相同的消息。这是否意味着你有一个大的有效载荷,你必须分成多个部分,通过MSMQ传输?
如果是这样,您有几个选择:
将有效负载存储在数据库或文件系统中的带外,并且只在一条消息(ID或文件系统路径)中放入足够的数据以从消息处理程序加载数据。
< / LI>使邮件成为包含BundleID,PartNumber,TotalParts和PayloadChunk的MessagePart。然后,为MessagePart创建一个存储每个部分的传奇,当收到所有部分时,重新组合块并执行您需要的操作。当然,如果你需要将生成的大对象重新发送到总线上,这会很快变得烦人,因此带外选项看起来会更有吸引力。
在任何情况下,为什么任何MSMQ消息(而不仅仅是NServiceBus消息)可能无序到达有很多原因,因此您必须能够处理它。
答案 1 :(得分:1)
Bus.Sending Imessages的集合是否有效? NServiceBus允许批量处理消息