NServiceBus 错误是否意味着消息未按正确顺序处理?
Does an NServiceBus error mean that messages are not processed in the right order?
假设我有一个银行应用程序(我不是在开发银行应用程序,但我相信它能理解我的观点,因为它在很多事件溯源示例中都有使用),它会生成以下消息:
1) Apply £110 withdrawal to account A
2) Apply £70 credit to account A
3) Apply £99 withdrawal to account A
4) Apply £42 withdrawal to account A
假设账户A没有透支。现在假设第三条消息失败是因为该消息特定的错误,例如序列化错误。在这种情况下,消息 3 被添加到 NServiceBus 错误队列中。
我的理解是,管理员使用像 Service Pulse 这样的工具来单独处理错误队列。假设管理员需要两个小时来处理错误,并且在该时间内完成了第四笔交易。那岂不是第四笔交易先于第三笔交易处理,账户可能会透支?
我已经完成了 NServiceBus 的在线课程,但我对此还不是很清楚。例如,我在这里也看过类似的问题:In CQRS how to work with NServiceBus to update Command and Query store
这是个好问题。作为这些事件来源的系统在平衡上是权威的。 banking 'core' 是一个更传统的分类账,有两阶段提交(而且我见过的大多数都有一个夜间循环流程来确定你是否透支)。这个核心系统可以发布信息交易和其他你可以转换成 NServiceBus 的东西。有了它,您可以做各种有用的事情,例如发送文本警报、将此通知另一个系统 activity、订阅欺诈预警系统、订阅奖励平台以累积奖励积分等。
正如您所说,由于错误,事件的顺序可能会乱七八糟。这是异步消息传递和存储转发的现实。每个接收系统都必须应对这一现实。如果有,您可以通过时间戳在目的地重新排序它们,但您不能确定在任何给定时间都拥有它们。
关于透支情况,最好的考虑方法是将其作为独立事件从权威核心中获取。它是唯一知道并可以推送 'Account overdrawn' 类事件的系统,该事件本身可以触发通知、费用、给分行经理的便条...
假设我有一个银行应用程序(我不是在开发银行应用程序,但我相信它能理解我的观点,因为它在很多事件溯源示例中都有使用),它会生成以下消息:
1) Apply £110 withdrawal to account A
2) Apply £70 credit to account A
3) Apply £99 withdrawal to account A
4) Apply £42 withdrawal to account A
假设账户A没有透支。现在假设第三条消息失败是因为该消息特定的错误,例如序列化错误。在这种情况下,消息 3 被添加到 NServiceBus 错误队列中。
我的理解是,管理员使用像 Service Pulse 这样的工具来单独处理错误队列。假设管理员需要两个小时来处理错误,并且在该时间内完成了第四笔交易。那岂不是第四笔交易先于第三笔交易处理,账户可能会透支?
我已经完成了 NServiceBus 的在线课程,但我对此还不是很清楚。例如,我在这里也看过类似的问题:In CQRS how to work with NServiceBus to update Command and Query store
这是个好问题。作为这些事件来源的系统在平衡上是权威的。 banking 'core' 是一个更传统的分类账,有两阶段提交(而且我见过的大多数都有一个夜间循环流程来确定你是否透支)。这个核心系统可以发布信息交易和其他你可以转换成 NServiceBus 的东西。有了它,您可以做各种有用的事情,例如发送文本警报、将此通知另一个系统 activity、订阅欺诈预警系统、订阅奖励平台以累积奖励积分等。
正如您所说,由于错误,事件的顺序可能会乱七八糟。这是异步消息传递和存储转发的现实。每个接收系统都必须应对这一现实。如果有,您可以通过时间戳在目的地重新排序它们,但您不能确定在任何给定时间都拥有它们。
关于透支情况,最好的考虑方法是将其作为独立事件从权威核心中获取。它是唯一知道并可以推送 'Account overdrawn' 类事件的系统,该事件本身可以触发通知、费用、给分行经理的便条...