我正在尝试调用 Apache OpenWhisk 操作(使用 JavaScript SDK)作为远程函数。我想等待函数结果可在我的应用程序中使用。
这通常通过使用阻塞调用来处理,例如
ow.actions.invoke({name, blocking: true, result: true, params})
...但在这种情况下,该操作需要几分钟才能完成,这会导致 HTTP 连接超时。 SDK 在 60 秒后抛出错误。
如何检索耗时超过一分钟的调用的操作结果?
Apache OpenWhisk 只会在 65 秒的默认时间限制内保留阻塞调用的打开连接。该限制由平台配置 https://github.com/apache/incubator-openwhisk/blob/master/core/controller/src/main/resources/application.conf#L21(而不是以每个用户为基础)。
如果您需要调用操作并阻止等待结果(对于长时间运行的操作),则需要执行以下操作:
- 使用非阻塞调用来调用操作。
- 使用返回的激活标识轮询激活结果API。
- 激活结果的 HTTP 响应将返回 HTTP 404 响应,直到操作完成。
当轮询非阻塞调用的激活结果时,您应该对允许的最大轮询时间施加限制。这是因为其他情况(例如无效的激活标识符)可能会返回 HTTP 404。强制执行时间限制可确保在应用程序代码或平台出现问题时,轮询循环最终停止!
将最大轮询时间设置为操作超时限制(加上一个小的偏移量)是一个好方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)