Rabbitmq 保持微服务数据的一致性

Rabbitmq 保持微服务数据的一致性,rabbitmq,zeromq,masstransit,microservices,Rabbitmq,Zeromq,Masstransit,Microservices,我们当前的项目基于微服务体系结构。到目前为止还不错,但我们开始寻找一种方法,使它们在数据方面保持一致状态 基本上,我们根据解决方案中的主要实体来划分它们。这些实体可以很好地独立工作,但它们之间仍然存在一些依赖关系,这涉及到在修改来自另一个微服务的实体时更新一组微服务 我们试图通过不同的途径应对这一挑战。 首先,我们认为rabbitmq是解决这个问题的一个很好的解决方案:一个微服务将一条包含更改信息的消息发送到一个交换机,然后将其扇出到使用微服务的队列。大概是这样的: 这似乎是一个很好的解决方案

我们当前的项目基于微服务体系结构。到目前为止还不错,但我们开始寻找一种方法,使它们在数据方面保持一致状态

基本上,我们根据解决方案中的主要实体来划分它们。这些实体可以很好地独立工作,但它们之间仍然存在一些依赖关系,这涉及到在修改来自另一个微服务的实体时更新一组微服务

我们试图通过不同的途径应对这一挑战。 首先,我们认为rabbitmq是解决这个问题的一个很好的解决方案:一个微服务将一条包含更改信息的消息发送到一个交换机,然后将其扇出到使用微服务的队列。大概是这样的:

这似乎是一个很好的解决方案,但如果任何消费者出现错误,我们都有点担心数据的一致性:我们需要实施一种策略,在所有消费微服务中恢复这些更改。我们也在考虑像ZeroMq这样的无代理技术,它可以在不存在代理瓶颈的情况下完成同样的任务

我们还认为masstransit路由滑动模式实现是一种可能的解决方案,因此我们可以以一种简单的方式补偿所有这些错误,但我们不喜欢使用这些更改的连续活动集。我们采用与rabbitmq相同的方法,在rabbitmq中,用户以更并行的方式工作

所以现在我们处于某种僵局中,我们想知道其他开发者选择了什么作为这个问题的解决方案。
如果能够解决这个问题,我们不会放弃其他技术。

这是微服务体系结构的主要缺点之一。我能想到:

  • 使用共享数据库实现反馈循环机制。例如,如果服务A向B、C和D发送更新。一旦B、C和D完成操作,他们应该更新数据库。如果更新未在超时时间内完成,则基于状态更新,服务a可能会触发反向操作或由业务逻辑决定的任何其他纠正操作
  • 我们有上述实现来解决上述问题

    您可以阅读我的文章来了解微服务设计原则:


    谢谢。

    如果许多实体需要应用某个操作,或者如果其中一个实体失败,则根本不需要应用任何操作,那么您就有一个共识问题,您应该寻找一个库/系统来解决这个问题。