首页 > 解决方案 > 在事件驱动的系统上保留已发布的事件是否至关重要?

问题描述

使用此处的示例作为案例: https ://microservices.io/patterns/data/event-driven-architecture.html

假设系统根本没有使用事件溯源。但更确切地说,事件只是触发某事的一种手段。

OrderService 是否需要在发布 OrderCreated 事件的地方持久化?

我的想法是,在调查/追踪事物的状态时,很难知道某个事件是否真的在某个时间点发布。

一般是怎么处理的?

标签: eventsevent-driven

解决方案


我之前围绕订单实现了一个事件驱动的系统,在我看来,订单需要在你广播OrderCreated事件之前被持久化。

订单可以保持在显示它正在等待授权或付款的状态。此时,订单不可用于履行(即货件创建),它只是在那里等待流程完成。

不过,订单可能仍会出现在某些用户界面中。例如,欺诈/支付团队可能对授权订单待处理队列的大小感兴趣,当然,如果订单因任何原因未能获得授权,欺诈团队可能希望对其进行审查以确定什么是继续并可能将其置于一种状态,使客户服务代表可以致电客户解决任何问题,例如更改付款方式。

因此,订单就像一个状态机,从一个状态移动到另一个状态,直到达到最终状态(例如取消、欺诈、发货等)。

这就是为什么我坚信如果将订单保存在数据库中并且不同的事件确保订单取得进展,它可能会更安全。

也许这就是为什么 Chris Richardson 建议使用 Saga 来控制这个状态机,这样你就有一个集中点来控制流。但是,我相信也可以仅使用事件来完成,只是控制整个流程有点棘手。


推荐阅读