Microservices 如何有效地避免同步和使用异步? 简介

Microservices 如何有效地避免同步和使用异步? 简介,microservices,Microservices,嘿,我的问题有点难以解释,所以我提前道歉 问题: 我正在尝试为我们的电子商务实现微服务,当实际逻辑和数据需要由其他(2-3)服务确定时,我遇到了如何响应请求的问题 为了便于理解,我将举一个例子 假设用户A正在尝试购买一种产品。单击“签出”按钮后,应执行这些步骤 流动 请求进入: 电子商务服务: 检查产品库存是否足够 发布指示已创建新订单的事件订单:已创建 反欺诈服务: 接收订单:创建的,并检查用户是否欺诈 发布指示检查成功的事件检查:成功 支付服务: 接收检查:成功并创建指向网关的url

嘿,我的问题有点难以解释,所以我提前道歉

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

为了便于理解,我将举一个例子

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

流动
请求
进入:

  • 电子商务服务:
  • 检查产品库存是否足够
  • 发布指示已创建新订单的事件<代码>订单:已创建
  • 反欺诈服务:
  • 接收
    订单:创建的
    ,并检查用户是否欺诈
  • 发布指示检查成功的事件<代码>检查:成功
  • 支付服务:
  • 接收
    检查:成功
    并创建指向网关的url
  • 将网关url发送给用户。((这就是问题所在))
由于所有这些步骤都是异步的,我如何响应请求

可能的解决办法 在用户请求结帐后,电子商务服务创建一个订单并立即响应新创建订单的orderId,在客户端,用户必须定期请求并检查订单状态是否为“待付款”
,以实现此目的,支付服务需要在订单获得系统批准后发布
payment:created
,然后电子商务服务可以更新订单

我的解决方案是可行的,但我对微服务真的很陌生,我想请教像你这样的专家如何以更好的方式实现这一点


非常感谢您阅读本文,感谢您抽出时间。

您的流程是一个同步过程。您需要上一步的结果,所以它必须一步一步地进行

系统观点:

这里重要的是:“如何处理步骤?”。这让我想起了SAGA设计模式(特别是当您需要回滚处理时),但通常有两种类型(编排和编排)。编排描述了多个服务之间的交互,其中as编排表示从一方的角度进行控制

为了简单起见,您可以实现命令模式或使用诸如ApacheCamel之类的EAI(企业应用程序集成)工具来根据流处理端点之间的消息

如果您有很多访问者,那么最好在端点之间使用队列,无论是否使用orchestrator

用户观点:


当用户单击以签出其购物车时。他们不期望有很多步骤,也不期望做更多的事情,而只是等待。保持连接响应打开不是一个好主意,也许装载器和它后面的周期性Ajax调用是足够的,而还有其他的解决方案,如推送通知(然后你可以考虑火灾和忘记机制)。

< P>处理定义的请求的工作流程是完全同步的。每一步都依赖于上一步,只有完成后才能开始。然而,第二步似乎不需要来自第一步的数据,所以实际上它们可以并行执行

因此,我们可以做的是启动这两项:

  • 检查产品库存是否足够
  • 检查用户是否存在欺诈行为
然后

  • 等待响应,如果两者都正常,则创建指向网关的url。并将其发送给用户
您可以创建驼峰路线或实现EIP的任何其他工具来实现该功能