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



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

  1. 在"服务"中创建新数据;A">
  2. "服务";A";创建事件消息以通知其他服务有关更改
  3. "服务";B";以及";C";订阅所创建的事件消息(来自服务"A"(的用户更新其复制的数据

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

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

新引入的服务";D";还需要复制来自服务"的数据;A";。"服务";D";需要所有历史数据,因为其他服务已经运行了一段时间;A";只广播新的变化。

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

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

最终选择了流。

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

最新更新