这是有界上下文的完美示例。
在表示相同或业务流程步骤的另一个系统(或有界上下文)中发生的事件不应被视为已在接收系统中发生的事件。
花店系统借记事件的结构可能与财务跟踪系统中发生的借记事件不同。
为了解决这个问题,我将有一个端点来监听 Florist System 事件,然后我会让 Finance Tracking System 根据事件中的信息发出命令,并在需要时将其与 Finance Tracking System 中的信息结合起来。发生这种情况的地方可以被认为是财务跟踪系统的客户,或者如果你愿意的话,甚至可能是“域服务”。
在这种特殊情况下,来自 Florist 系统的事件与 Florist 系统中发生的交易信息(有界上下文)一起出现。我不会在域服务中做出任何决定,而是向财务跟踪系统域发出命令,在该域中进行决策并可能发出财务跟踪系统事件。如果 Florist 系统事件在 Finance Tracking System 中出现格式错误,您可能不想以 Request/Response 或 Ack/Nack 的方式告诉 Florist 系统。该事件是从 Florist 发布的,如果您实现类似的东西,您将破坏消息传递模式。您的消息传递基础架构应该允许您重试消息,甚至修复接收代码并使用新代码重试消息。
但是,如果您确实需要回传 Florist 有界上下文,Florist 系统可以订阅来自 Finance Tracking System 的事件,以查明交易是否已成功处理。只有在主系统决定是否发生交易时才需要这样做。
如果您描述的财务跟踪系统更像是一个事务日志,那么您唯一要做的就是不要将花店事件视为财务跟踪系统事件。在导致财务跟踪系统事件的发出命令之间放置一些东西。
编辑:
作为对您的编辑的回应。您接收组件应将命令发送到 Finance Tracking System 域,该域又会发出事件(像往常一样)。