我正在将不同的有界上下文与 Windows 服务总线集成,但有一些问题:
1) 如何检测其他有界上下文中的重复项?存储最后处理的消息序列?我希望能够重新触发事件,以允许重新同步新的有界上下文 HandleEvent(OrderPlaced orderPlaced, bool isReplay)
,这些上下文将在将来购买到生产中以进行初始同步。
2) 对于上下文间消息总线,我们是否会为每个有界上下文使用一个主题(并具有对有界上下文进行分组的命名空间)?或者每个命名空间一个有界上下文?
3) 消息总线文档说消息可能无序到达,应该使用什么算法按顺序重新组装?如果收到消息 6 和 8,但从未收到消息 7,会发生什么情况?我们会等待指定时间,然后继续吗?如何允许 self 修复?
4)我想上述内容在几乎所有 DDD 项目中都很常见,是否有任何库可以处理消息传递(包括命令/响应协议(protocol))以请求从外部有界上下文同步以前的事件?
最佳答案
这并不能回答您的大部分问题,但为您提供了另一种选择。
当我开始拉动事件而不是让事件推送给我时,很多问题就消失了。如果我正在拉动,我只需保留已处理的事件编号的检查点。当我需要重建时,我删除读取模型和检查点,新的读取模型将自动创建。由于我使用的是单个编写器,因此重复不是问题。订购也不是问题。
尽管如此,我们仍然有事件被推出 - 但这些仅用于 react 行为。例如;下订单后,打印票据。
这对您是否有意义,取决于您需要对事物使用react的速度,以及您需要数据的新鲜程度(1 秒与 30 秒等)。
关于architecture - DDD 有界上下文通信消息总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015426/