微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在微服务之间需要异步异步通信设计

如何解决在微服务之间需要异步异步通信设计

我有一个用例,其中客户端需要与不同微服务拥有的不同实体进行交互。但是这些实体的创建实际上依赖于先前的实体。 例如:MicroService1拥有data1 微服务2拥有数据2(创建数据2需要数据1) Microservice3拥有data3(创建data3需要data2)

MicroService1-> Microservice2-> Microservice3之间的通信是异步的

现在,客户端需要与data1和data3进行交互。这实际上导致了分布式环境中的经典问题,其中客户端需要在摄取数据1之后立即与数据3进行交互,但是数据1尚未到达MicroService2,然后最终数据2尚未到达微服务,因此系统还没有数据3。

对我来说,最后的选择是使流同步以处理用例或引入计算的等待。但是我希望是否有任何设计模式/参考可以在不影响服务之间通信异步性的情况下处理场景。

就上下文而言,这里的Data1是采购订单,data2是项目,其价格在采购订单中,data3是发票(按确定的频率创建),包含来自多个此类采购订单的所有项目。客户将串流采购订单,并期待它们的发票。因此,可能发生多种比赛情况。客户希望开具特定购买订单的发票,但仍在处理中。需要合并到正在运行的发票中的采购订单甚至还没有到达Microservice3。甚至更糟的是,采购订单具有更新的版本v2,其中包含一些额外的项目,但是Microservice2仅处理了版本1的项目,现在发票创建最终将使用版本1而不是版本2。这是因为我们正在事件级别进行处理,但是如果调用将被同步,则在创建发票之前我们将收到v2

解决方法

首先,问题描述有点抽象,因此很难提出具体建议。

MicroService1-> Microservice2-> Microservice3之间的通信是异步的

“异步通信”听起来像您可以通过发布在例如Kafka主题和消费者收听该主题。

现在,客户端需要与data1和data3进行交互。

因此,如果消费者收听topic_for_data3,则他们可以“查找”数据1或也订阅topic_for_data1,因为在发布data3时data1已经可用。

从抽象问题描述中,很难比这更具体了。但这可能是做到这一点的一种方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。