【问题标题】:How to make REST call asynchronous in Java如何在 Java 中使 REST 调用异步
【发布时间】:2021-08-08 17:09:37
【问题描述】:

我在两个微服务之间进行了 REST 调用,其中一个调用需要 15 分钟以上的时间才能完成。我们有公司自己的私有云实现,它会终止任何保持超过 15 分钟的开放连接。

我们正在寻找一些异步休息调用实现,其中服务 A 将触发对服务 B 的休息调用并忘记,服务 B 将在响应准备好提供服务时通知。 对于这种情况,是否有任何广泛使用的技术/API?在这方面我找不到任何具体的东西。

【问题讨论】:

  • 在这里使用任何消息系统 kafka,sqs,RabbitMq

标签: java spring-boot rest asynchronous callback


【解决方案1】:

您可以使用轮询。像这样:

服务 A 触发对服务 B 的 Rest 调用,该调用返回 OK 响应。然后在每 1 分钟服务 A 向服务 B 中的另一个端点发出另一个 API 请求,该请求将返回前一个请求的状态,直到该过程完成或可能是某个时间点。现在,当第二个请求发送状态为成功时,您可以将过程标记为已完成。

【讨论】:

    【解决方案2】:

    创建一个临时资源,而不是创建实际资源。您可以发出 202(已接受)响应代码,而不是返回 201(已创建)HTTP 响应。这会通知客户端该请求已被服务器接受并理解,但资源尚未(尚未)创建。在 Location 标头中发送临时资源。

    请求:

    POST /blogs HTTP/1.1
    <xml>
        blogdata
    </xml>
    

    回复:

    HTTP/1.1 202 Accepted
    Location: /queue/12345
    

    此位置可以存储有关实际资源状态的信息:关于何时创建、当前正在完成或处理的内容的 ETA。

    创建实际资源后,临时资源可以返回 303(请参阅其他)响应。位置标头将 URI 返回到最终资源。客户端可以删除临时资源,或者服务器可以使该资源过期并稍后返回 410 (Gone)。

    来源:https://restcookbook.com/Resources/asynchroneous-operations/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2011-04-28
      • 1970-01-01
      • 2011-01-11
      • 2012-01-20
      相关资源
      最近更新 更多