如何从其他服务加载历史事件?

问题描述

我有一个 User Microservice ,它在创建,修改删除用户时发布事件。另外,我有一个日历微服务,需要用户数据。日历服务,订阅用户事件并保留所需数据的只读副本。

我刚刚添加了需要现有用户数据的帐户微服务,并且我使用了与上述相同的模型。将现有用户数据放入“帐户微服务”的最佳方法是什么?

当我做第一个微服务时,我为每个用户重新发布了用户修改的事件。这很简单,因为没有其他东西正在使用此事件。如果我现在重新发布,对于新的Account Microservice,现有的Calendar Microservice也将获得事件。我的逻辑是幂等的,但这是很多浪费的工作,只会随着我获得更多服务而变得更糟。

我过去已经加载了很多数据。我知道如何使它起作用,但是我正在寻找一种最佳实践,并且以最小的协作和与其他服​​务的依赖性来做到这一点。

解决方法

当我做第一个微服务时,我为每个用户重新发布了用户修改的事件。这很简单,因为没有其他东西正在使用此事件。如果我现在重新发布,对于新的Account Microservice,现有的Calendar Microservice也将获得事件。我的逻辑是幂等的,但这是很多浪费的工作,只会随着我获得更多服务而变得更糟。

这里可能想要的是一种设计,您可以将事件的副本,而不是将其推送到新系统:请参阅Greg Young,Polyglot Data

粗略笔触-订户跟踪高水位线,并在某个水位线之后询问更多事件,然后事件存储按顺序用零个或多个新事件来回答该查询。 twitter timeline api可以使您了解其工作方式-遗憾的是,解释想法的图像似乎已从文档中删除,但其中一些图像已在stack overflow处捕获,并通过wayback machine