我正在尝试找到一种方法来按照发件人发送的顺序处理邮件,因为NServiceBus不保证邮件将按特定顺序处理。
发件人是一个发布createOrder和reviseOrder命令的订单系统。发件人允许用户向同一订单提交多个修订版,因此队列中可以同时包含修订版4和修订版3。每个修订版都有一个与之关联的修订号和原因代码,这些代码驱动了一些业务逻辑,因此我们不能忽略任何修订或至少部分原因。
下面列出了我的一些想法 -
将修订号存储到目标记录中。发件人在每个修订消息中发送其修订号。处理程序比较发件人和目标修订号,如果匹配,则更新记录,否则将消息放在队列末尾。使用此方法,如果修订版2消息失败并进入错误队列,则将永远不会处理修订版3。
发件人发送每条修订邮件的所有修订的所有原因代码的历史记录。因此,如果修订版2消息失败,则修订版3消息将具有所有原因代码。这些原因代码将记录在目标中,但可能不会出现与先前修订原因代码相关的任何业务逻辑。
我们如何为这种情况设计?
关于如何处理失败的修订消息的任何想法?
非常感谢一些指导。
感谢。
答案 0 :(得分:8)
开箱即用的NserviceBus的主要指导原则之一就是你应该以一种顺序无关紧要的方式构建你的系统。虽然我之前已经建立了一个有序的NSB系统,但我决定这样做:
这通常效果很好,但是如果某些事情发生故障太长时间,并且需要手动干预重新排序,有时候事情会有点不合适。
在您的方案中,可能有更好的方法。鉴于您只想在订单的修订中订购。我认为你可以用不需要有序交付的方式构建它。
这有很多好处。
但它有以下缺点: