微服务 RabbitMq 代理中的最终一致性数据编排

Eventual consistency data orchestration in microservices RabbitMq broker

我在微服务中有以下流程:

  1. 在服务“A”中创建了新数据。
  2. 服务“A”创建事件消息以通知其他服务有关更改。
  3. 订阅创建的事件消息(来自服务“A”)的服务“B”和“C”更新它们的复制数据。

跨多个服务的相同数据最终是一致的。我正在使用 RabbitMq 作为服务之间的消息代理(非常不希望使用另一个代理)。

假设我的服务已经 运行 一段时间了,它们之间的数据是一致的,所有新的更改都被复制并最终保持一致。突然间我有一个添加新服务的要求(我们称之为“D”)。

新引入的服务“D”还需要复制来自服务“A”的数据。服务“D”需要所有历史数据,因为其他服务已经 运行 一段时间,而服务“A”仅广播新的更改。

问题:我当前的解决方案仅为新数据更改创建事件消息。

用历史数据填充新添加的服务的正确解决方案是什么?

最终选择了 streams

所有事件都保存在流中。每个客户端跟踪其阅读消息的进度。新引入的客户端从流的开头读取,从而允许他们访问所有历史数据。