【问题标题】:How should I load historical events from another service?我应该如何从其他服务加载历史事件?
【发布时间】:2021-02-03 07:38:06
【问题描述】:

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

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

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

我过去加载过很多数据。我知道如何让它发挥作用,但我正在寻找一种最佳实践和一种方法,以最大限度地减少与其他服务的协调和依赖。

【问题讨论】:

  • 在远程服务赶上之前查询事件怎么样?否则,我认为可以做到这一点的唯一其他方法是拥有一个专用的消费者队列,您只能在那里重新发布事件。这与消费者在队列中缓冲消息时从未上线的结果相同。
  • 时间戳有用吗?

标签: microservices domain-driven-design message-queue messaging domain-events


【解决方案1】:

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

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

概括地说 - 订阅者跟踪高水位标记,并在某个标记之后请求更多事件,然后事件存储按顺序用零个或多个新事件回答该查询。 twitter timeline api 可以让您了解它是如何工作的——遗憾的是,解释这些想法的图像似乎已从文档中删除,但其中一些已在stack overflow 和@ 987654324@

【讨论】:

    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多