首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rabbitmq队列处理微服务之间的实时数据同步

使用rabbitmq队列处理微服务之间的实时数据同步
EN

Stack Overflow用户
提问于 2021-07-07 04:02:55
回答 1查看 489关注 0票数 0

我们已经设置了我们的微服务来使用rabbitmq队列来处理任何即将到来的数据。

所以,我们有service Aservice Bservice Cservice D

当请求向service A创建一个用户时,它会创建一个用户并将一个事件推送到newUserIsCreated队列中。

现在,service Bservice C需要为新添加的用户更新他们的数据库。

问题

如果用户创建在任何service Bservice C中失败怎么办。

可能的失败场景可能是验证失败,或者service Bservice C下降了。

如果service D试图访问同一个用户,也会出现问题。

service Bservice C的反应是什么?因为那样他们就不会有新创建的用户了。

要而论之,

如何处理这些服务之间的验证失败或任何类型的失败?

如果需要实时同步,该怎么办?(处理队列可能需要时间)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-07 14:38:44

您可以让BC (以及任何其他需要确认用户已经创建的服务)向RabbitMQ发布一条确认消息,由A来获取;然后,在收到确认之前,A不会确认用户已被创建。这并不是万无一失的:它在任何地方都有成功的机会,但A没有及时得到确认。对于这种情况(理想情况下很少见),您可以有一个进程来清理。

值得注意的是,这种同步关系基本上是通过消息队列重新实现请求/响应,所以如果沿着这条路径走下去,为什么不直接进行请求/响应(例如HTTP或gRPC)?

如果您有一个需要影响多个服务的操作,那么将其建模为一个传奇通常是有用的,它将向各种服务发出请求并处理故障(如果有太多故障,则可能放弃,从而回滚它所做的更改)。通过持久化saga的状态(例如更新的B,但C尚未确认更新),可以对其进行查询。

如果您发现B中的大多数操作都是sagas接触A的一部分,那么可能值得考虑BA是否应该是相同的服务,这将提供更强的一致性保证,并可能简化事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68279846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档