考虑到这种情况并想象一个过于简化的订购系统,如下图所示:
以及以下消息流:
- 订单来自某个来源(网络/移动设备等)
- 订单服务接受订单并发布
CreateOrderEvent
- InventoryService 对 做出反应
CreateOrderEvent
,做一些库存工作并InventoryUpdatedEvent
在完成后发布 - Invoice 服务然后对 做出反应
InventoryUpdatedEvent
,发送发票并发布EmailInvoiceEvent
所有服务都已启动,我们愉快地处理订单……每个人都很高兴。然后,库存服务因某种原因而关闭
假设事件总线上的事件在“非阻塞”庄园中流动。即消息被发布到一个中心主题,如果没有服务正在读取它,则不要堆积在队列中(我试图传达的是一个事件总线,如果事件在总线上发布,它会流“直接通过”而不是排队 - 忽略此时使用的消息传递平台/技术)。这意味着,如果 Inventory 服务关闭了 5 分钟,那么CreateOrderEvent
在此期间通过事件总线的 ' 现在“消失”或不被 Inventory 服务看到,因为在我们过于简化的系统中,没有其他系统对那些事件。
那么我的问题是:库存服务(以及整个系统)如何以不丢失/未处理订单的方式恢复状态?