events - 在事件驱动的系统上保留已发布的事件是否至关重要?
问题描述
使用此处的示例作为案例: https ://microservices.io/patterns/data/event-driven-architecture.html
假设系统根本没有使用事件溯源。但更确切地说,事件只是触发某事的一种手段。
OrderService 是否需要在发布 OrderCreated 事件的地方持久化?
我的想法是,在调查/追踪事物的状态时,很难知道某个事件是否真的在某个时间点发布。
一般是怎么处理的?
解决方案
我之前围绕订单实现了一个事件驱动的系统,在我看来,订单需要在你广播OrderCreated
事件之前被持久化。
订单可以保持在显示它正在等待授权或付款的状态。此时,订单不可用于履行(即货件创建),它只是在那里等待流程完成。
不过,订单可能仍会出现在某些用户界面中。例如,欺诈/支付团队可能对授权订单待处理队列的大小感兴趣,当然,如果订单因任何原因未能获得授权,欺诈团队可能希望对其进行审查以确定什么是继续并可能将其置于一种状态,使客户服务代表可以致电客户解决任何问题,例如更改付款方式。
因此,订单就像一个状态机,从一个状态移动到另一个状态,直到达到最终状态(例如取消、欺诈、发货等)。
这就是为什么我坚信如果将订单保存在数据库中并且不同的事件确保订单取得进展,它可能会更安全。
也许这就是为什么 Chris Richardson 建议使用 Saga 来控制这个状态机,这样你就有一个集中点来控制流。但是,我相信也可以仅使用事件来完成,只是控制整个流程有点棘手。
推荐阅读
- ios - 您如何将右对齐的 UILabel 水平自动滚动到右侧?
- css - 使用最大宽度时不需要的空间
- c# - 为什么我按LMB时球会掉下来?
- prometheus - 可观察性:我们可以按标签过滤,然后在 prometheus 或任何指标后端服务器上聚合
- c - 如何启用长 gtk 菜单滚动?
- python - Geopandas 在读取 shp 文件时抛出驱动错误
- function-pointers - Ada 访问无参数过程“错误约定”
- spring-boot - 无法推断基本 url...springfox-swagger2 版本 2.9.2
- java - 如何使用 Javax Mail 处理 gmail App 密码
- math - 阶乘的素数分解