我在两个微服务之间有REST调用,其中一个调用需要超过15分钟的时间才能完成。我们公司有自己的私有云实现,它会终止任何保持超过15分钟的开放连接。
我们正在寻找一些异步rest调用实现,其中服务A将触发对服务B的rest调用并忘记,服务B将在响应准备就绪时通知。对于这种情况,是否有广泛使用的技术/API ?在这方面我找不到任何具体的东西。
您可以使用轮询。像这样:
服务A触发对服务B的Rest调用,服务B返回一个OK响应。然后,在每1分钟内,服务A向服务B中的另一个端点发出另一个API请求,该请求将返回前一个请求的状态,直到流程完成或可能是某个时间点。现在,当第二个请求发送状态为成功时,您可以将流程标记为完成。
不创建实际资源,而是创建一个临时资源。您可以发出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/