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

Microservices 如何从其他服务加载历史事件?,microservices,domain-driven-design,message-queue,messaging,domain-events,Microservices,Domain Driven Design,Message Queue,Messaging,Domain Events,我有一个用户微服务,它在创建、修改或删除用户时发布事件。此外,我还有一个需要用户数据的日历微服务。日历服务订阅用户事件并保留所需数据的只读副本 我刚刚添加了一个帐户微服务,它需要现有的用户数据,我使用了与上面相同的模型。将现有用户数据放入帐户微服务的最佳方式是什么 当我做第一个微服务时,我为每个用户重新发布了用户修改事件。这很简单,因为没有其他人使用此事件。如果我现在重新发布,对于新帐户微服务,现有日历微服务也将获得事件。我的逻辑是幂等的,但这是大量浪费的工作,而且随着我得到更多的服务,情况只会

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

我刚刚添加了一个帐户微服务,它需要现有的用户数据,我使用了与上面相同的模型。将现有用户数据放入帐户微服务的最佳方式是什么

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

我过去加载过很多数据。我知道如何使它工作,但我正在寻找一个最佳实践和一种方法,以尽可能少的协调和依赖与其他服务

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

这里您可能想要的是一种将事件的副本拉入(而不是推入)新系统的设计:请参见Greg Young


概括地说,订阅者跟踪高水位线,在某个水位线之后请求更多的事件,然后事件存储以零或更多的新事件顺序回答该查询。可以让您感觉到这可能是如何工作的——遗憾的是,解释这些想法的图像似乎已从文档中删除,但其中一些图像已在此处捕获,

在远程服务赶上之前查询事件如何?否则,我认为实现这一点的唯一其他方法是使用一个专用的使用者队列,您只在那里重新发布事件。这与消费者在队列中缓冲消息时从未联机的结果相同。时间戳是否有帮助?