Asynchronous 微服务异步体系结构,用于实现相互关联的服务

Asynchronous 微服务异步体系结构,用于实现相互关联的服务,asynchronous,microservices,backend,Asynchronous,Microservices,Backend,我有一个关于相互关联的服务的微服务架构的问题。 例如 让我们思考一下电子商务中的塞纳里奥 我们有BuyProduct端点和对此端点的请求 浏览器请求 BuyProduct执行。 BuyProduct有三个服务呼叫 1) 支付服务电话 如果支付服务失败 返回false 否则 继续 2) 股票服务电话 如果库存服务失败 返回false 否则 继续 3) 帐户服务呼叫 如果帐户服务失败 返回false 否则 继续 返回浏览器成功或失败 在本例中,当从一个服务调用传递到另一个服务时,我假设为成功或失败状

我有一个关于相互关联的服务的微服务架构的问题。 例如 让我们思考一下电子商务中的塞纳里奥

我们有BuyProduct端点和对此端点的请求

  • 浏览器请求
  • BuyProduct执行。
    BuyProduct有三个服务呼叫
    1) 支付服务电话
    如果支付服务失败
    返回false
    否则
    继续
    2) 股票服务电话
    如果库存服务失败
    返回false
    否则
    继续
    3) 帐户服务呼叫
    如果帐户服务失败
    返回false
    否则
    继续

  • 返回浏览器成功或失败

  • 在本例中,当从一个服务调用传递到另一个服务时,我假设为成功或失败状态。 但是,例如,可能存在这样一种情况,即从支付服务调用返回的值被调用到股票服务调用请求

    我的问题是,

    如果我们有MessageBroker,并且希望使用MessageBroker(如rabbitmq或其他)构建异步体系结构,那么我们如何实现这个senario呢?此解决方案是否有效,或者是否存在任何解决方案? 最佳做法是什么? 我在谷歌上搜索,但找不到令我满意的解决方案

    我不确定我认为我的解决方案是否正确。(我指的是rest同步架构)

    如果浏览器等待立即的结果,我们想保证我们的过程成功或失败,会发生什么


    当我们认为这个senario是全部还是无时,我们能做什么呢?

    如果您使用消息代理使它异步,那么您将不得不处理消息代理的概念。这意味着在很短的一段时间内(希望如此),您将处理付款,但没有更新库存和帐户状态

    然后,您的代码必须能够处理不一致性。例如,只剩下一件商品,两位客户同时购买了该商品。对支付服务的调用将对这两种服务都有效,但对股票服务的调用之一将失败

    有助于管理此类数据一致性问题的微服务模式称为。saga基本上是一种协调多个微服务以确保数据保持一致的方式协同工作的机制。既然您提到您正在探索MessageBroker的使用,那么您可能想看看基于编排的方法

    1)如果我们呼叫支付服务并获取paymentId并将此paymentId发送到库存服务,我们将怎么做?2)如果我们必须成功返回已完成的付款和库存,我们将怎么做?RESTAPI或websocket。听起来RESTAPI不是解决方案?对吗?