假设您有多个由事件集成的系统,并且它们都使用事件溯源。你在哪里存储事件?
就我而言,我有三个系统:
- 一个网站,一个商店
- 网站的后端,用于管理客户、产品等。
- 会计系统
每当在这些系统之一中发生域事件时,该事件就会被发布并且可以由其他系统处理。所有系统都使用事件溯源。
我想知道您将在哪里保存事件。当然,每个系统都必须存储它处理的所有事件,因为它使用事件源,因此依赖于它曾经处理过的事件。
但是对于其他不需要且因此系统没有订阅的事件呢?我正在努力解决需求可能会发生变化的事实,这样系统就必须处理过去没有持续存在的事件。如果系统需要处理发生时未订阅的事件,您将从哪里获得这些事件?
我认为此时不使用事件溯源的系统有很大的不同。如果您必须在系统 A 中实现依赖于数据的功能,该功能在 A 中不可用,但在另一个系统 B 中,并且您通过像 NHibernate 这样的 ORM 工具保持当前状态,您可以简单地将数据从 A 导入到 B . 由于使用事件溯源的系统依赖于事件来达到其当前状态,因此您必须导入过去错过但现在需要的所有事件。
对我来说,这个问题有几种不同的方法。
- 每个系统都保存所有发布的事件。这使您能够在需要时重新发布事件或将它们导入另一个系统。
- 每个系统都会保存所有发生的事件,即使是那些(还)不需要处理的事件。
- 来自所有系统的所有事件都存储在中央事件日志中。如果您需要处理过去发生但您没有订阅的事件,您可以从这里导入它。
你如何处理这样的情况?你在哪里保存你的事件?
编辑
感谢 Roy Dictus 的回答。我仍然不确定如何处理以下情况:
该网站发布事件 CustomerRegistered、CustomerPurchasedProduct 和 CustomerMarkedProductAsFavorite。在后端的当前版本中,必须显示客户并且必须显示他们的购买。客户标记为收藏的内容对该版本的系统不感兴趣。因此后端只订阅了 CustomerRegistered 和 CustomerPurchasedProduct。
现在营销部门还希望在客户详细信息页面上显示有关最喜欢的产品的信息。由于后端未订阅 CustomerMarkedProductAsFavorite,因此此信息在后端不可用。我从哪里得到这些信息?