首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免同步,有效地使用异步?

如何避免同步,有效地使用异步?
EN

Stack Overflow用户
提问于 2020-11-08 18:31:27
回答 2查看 214关注 0票数 1

简介

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

问题

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

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

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

Request进来了:

inventory.

  • Publish
  • 电子商务服务:
    1. 检查产品在
    2. 中是否有足够数量,这是一个表示新订单已经创建的事件。order:created

not

  • Publishes

  • 反欺诈服务:
  1. 接收order:created并检查用户是否是欺诈行为,或者是表示检查成功的事件。check:succeed

gateway.

  • Sends

  • 支付服务:
  1. 接收check:succeed并为用户创建一个到check:succeed的url网关url。(这就是问题产生的地方,))

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

可能解决办法

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

我的解决方案很管用,但我对微服务非常陌生,我想问一下像你这样的专家如何更好地实现这一点。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-19 07:42:00

您的流程是一个同步过程。你需要一个前一步的结果,所以它必须一步一步地走。

的系统观点:

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

为了简单起见,您可以实现命令模式或使用EAI()工具(如Apache )根据流程处理端点之间的消息。

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

用户视图:

当用户单击以签出他们的购物车时。他们并不期待很多步骤,也不会做更多的事情,而不仅仅是等待。由于保持连接打开以供响应并不是一个好主意,可能是一个加载程序,并且后面有一个定期的ajax调用,所以在有其他解决方案(比如推送通知)(然后可以考虑触发和忘记机制)的情况下,已经足够了。

票数 1
EN

Stack Overflow用户

发布于 2020-11-20 08:33:11

您定义的处理请求的工作流是完全同步的。每个步骤取决于前一步,在完成之前不能开始。然而,第二步似乎不需要来自第一步的数据,因此实际上它们可以并行执行。

因此,我们可以做的是启动这两种方法:

inventory.

  • Checks中的
  • 检查产品的数量是否足够,用户是否为

然后

  • 等待响应,如果两者都正常,则为网关创建一个url。并将其发送给用户.

您可以创建骆驼路由或实现EIP的任何其他工具来实现此功能。

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

https://stackoverflow.com/questions/64741697

复制
相关文章

相似问题

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