首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设计微服务中的异步通信?

如何设计微服务中的异步通信?
EN

Software Engineering用户
提问于 2020-11-14 00:39:20
回答 1查看 204关注 0票数 3

Intro

嘿,我的问题很难解释,所以我提前道歉。

问题

我试图为我们的电子商务实现微服务,当实际的逻辑和数据需要由其他( 2-3 )服务来确定时,我遇到了如何响应请求的问题。

为了使它更容易理解,我将举一个例子。

假设用户A正在尝试购买一种产品。单击“签出”按钮后,这些步骤应该会发生。

Request进来了:

  • 电子商务服务:
    1. 检查产品是否有足够的库存。
    2. 发布指示已创建新订单的事件。order:created

  • 反诈骗服务:
    1. 接收order:created并检查用户是否有欺诈行为。
    2. 发布一个事件,该事件指示检查成功。check:succeed

  • 支付服务:
    1. 接收check:succeed并为网关创建一个url。
    2. 向用户发送网关url,可能会发布payment:created事件。((这是我的问题所在)

由于所有这些步骤都是异步的,我如何响应Request

可能的解决方案

当用户请求结帐后,电子商务服务创建一个订单,并立即使用新创建的订单的orderId进行响应,在客户端,用户必须定期请求并检查订单状态是否为PENDING PAYMENT,为此,支付服务需要在系统批准订单后发布payment:created,然后电子商务服务才能更新订单。

我的解决方案很有效,但我对微服务非常陌生,我想知道是否有更好的方法来实现这一点。

如果你能读到这么多,我真的很感激,谢谢你抽出时间。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2020-11-14 07:20:21

你的解决方案绝对够好的。它和书微服务模式推荐的一样。在订单被拒绝的情况下,您还需要实施一个saga来回退每个服务。

另一件事是,如果流量可以并行进行的话,就应该考虑一下。除非服务之间存在数据依赖关系,否则如果请求服务同时查询这3个服务,然后按照它们输入的顺序对结果进行聚合,就会使事情变得更快。

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

https://softwareengineering.stackexchange.com/questions/418966

复制
相关文章

相似问题

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