假设我在两个单独的服务中部署了两个聚合。聚合 2 监听聚合 1 的事件。
当我长时间停止聚合服务2时,如何恢复所有错过的事件?
- 从聚合 1 个事件存储中检索所有错过的事件?
- 如果聚合 1 已经积累了很多事件怎么办。聚合 2 是否允许使用聚合 1 的快照?
假设我在两个单独的服务中部署了两个聚合。聚合 2 监听聚合 1 的事件。
当我长时间停止聚合服务2时,如何恢复所有错过的事件?
1) 从聚合 1 事件存储中检索所有错过的事件?
是的。
2) 如果聚合 1 已经积累了很多事件怎么办。聚合 2 是否允许使用聚合 1 的快照?
是的。
但是,在一个高度断开连接的上下文中,分区容错性优于一致性,您必须为聚合 2 处理的所有事件安排补偿操作。实际上,您可能会遇到聚合 2 处理的事件如果它无法处理的情况。已正确接收来自聚合 1 的事件。
从聚合 1 个事件存储中检索所有错过的事件?
是的,这将是一般方法。在基础架构级别,您可以记住最后看到的序列号,然后请求将此后的事件推送给您。
如果聚合 1 已经积累了很多事件怎么办。聚合 2 是否允许使用聚合 1 的快照?
这里的答案可能不是——如果两者能够共享快照,那么首先可能值得重新考虑聚合边界是否正确。但是,这实际上取决于聚合 1 的提要的性质。我通常会避免这种情况,除非您确实遇到了必要的问题。