Microservices 如何有效地避免同步和使用异步? 简介
嘿,我的问题有点难以解释,所以我提前道歉 问题: 我正在尝试为我们的电子商务实现微服务,当实际逻辑和数据需要由其他(2-3)服务确定时,我遇到了如何响应请求的问题 为了便于理解,我将举一个例子 假设用户A正在尝试购买一种产品。单击“签出”按钮后,应执行这些步骤 流动Microservices 如何有效地避免同步和使用异步? 简介,microservices,Microservices,嘿,我的问题有点难以解释,所以我提前道歉 问题: 我正在尝试为我们的电子商务实现微服务,当实际逻辑和数据需要由其他(2-3)服务确定时,我遇到了如何响应请求的问题 为了便于理解,我将举一个例子 假设用户A正在尝试购买一种产品。单击“签出”按钮后,应执行这些步骤 流动 请求进入: 电子商务服务: 检查产品库存是否足够 发布指示已创建新订单的事件订单:已创建 反欺诈服务: 接收订单:创建的,并检查用户是否欺诈 发布指示检查成功的事件检查:成功 支付服务: 接收检查:成功并创建指向网关的url
请求
进入:
- 电子商务服务:
- 检查产品库存是否足够
- 发布指示已创建新订单的事件<代码>订单:已创建
- 反欺诈服务:
- 接收
订单:创建的
,并检查用户是否欺诈
- 发布指示检查成功的事件<代码>检查:成功
- 支付服务:
- 接收
并创建指向网关的url检查:成功
- 将网关url发送给用户。((这就是问题所在))
payment:created
,然后电子商务服务可以更新订单
我的解决方案是可行的,但我对微服务真的很陌生,我想请教像你这样的专家如何以更好的方式实现这一点
非常感谢您阅读本文,感谢您抽出时间。您的流程是一个同步过程。您需要上一步的结果,所以它必须一步一步地进行 系统观点: 这里重要的是:“如何处理步骤?”。这让我想起了SAGA设计模式(特别是当您需要回滚处理时),但通常有两种类型(编排和编排)。编排描述了多个服务之间的交互,其中as编排表示从一方的角度进行控制 为了简单起见,您可以实现命令模式或使用诸如ApacheCamel之类的EAI(企业应用程序集成)工具来根据流处理端点之间的消息 如果您有很多访问者,那么最好在端点之间使用队列,无论是否使用orchestrator 用户观点:
当用户单击以签出其购物车时。他们不期望有很多步骤,也不期望做更多的事情,而只是等待。保持连接响应打开不是一个好主意,也许装载器和它后面的周期性Ajax调用是足够的,而还有其他的解决方案,如推送通知(然后你可以考虑火灾和忘记机制)。 < P>处理定义的请求的工作流程是完全同步的。每一步都依赖于上一步,只有完成后才能开始。然而,第二步似乎不需要来自第一步的数据,所以实际上它们可以并行执行 因此,我们可以做的是启动这两项:
- 检查产品库存是否足够
- 检查用户是否存在欺诈行为
- 等待响应,如果两者都正常,则创建指向网关的url。并将其发送给用户