以这里的例子为例: https://microservices.io/patterns/data/event-driven-architecture.html
假设系统根本没有使用事件溯源。但相反,事件只是触发某些东西的一种手段。
OrderService 是否需要保留在发布 OrderCreated 事件的位置?
我的想法是,在调查/追踪事物的状态时,很难知道事件是否真的在某些时间点发布。
通常如何处理?
我之前已经围绕订单实现了一个事件驱动的系统,在我看来,在广播OrderCreated
事件之前,需要保留订单。
订单可以保持显示其处于待处理状态并等待授权或付款的状态。此时,订单无法履行(即创建货件(,它只是在那里等待流程完成。
不过,该顺序可能仍会出现在某些用户界面中。例如,欺诈/支付团队可能对授权订单待处理队列的大小感兴趣,当然,如果订单因任何原因未能获得授权,欺诈团队可能希望对其进行审查以确定发生了什么,并可能将其置于一种状态,以便客户服务代表可以致电客户以解决任何问题, 例如,更改付款方式。
因此,订单就像一台状态机,从一个状态移动到另一个状态,直到它达到最终状态(例如取消、欺诈、发货等(。
这就是为什么我明确认为,如果订单保存在数据库中并且不同的事件确保订单取得进展,则订单可能会更安全。
也许这就是为什么 Chris Richardson 建议使用 Saga 来控制这个状态机,这样你就有一个集中的点来控制流。但是,我相信也可以仅使用事件来做到这一点,只是控制整个流程有点棘手。