我正在尝试调用 Apache OpenWhisk 操作(使用 JavaScript SDK)作为远程函数。我想等待函数结果可以在我的应用程序中使用。
这通常通过使用阻塞调用来处理,例如
ow.actions.invoke({name, blocking: true, result: true, params})
...但在这种情况下,该操作需要几分钟才能完成,这会导致 HTTP 连接超时。SDK 在 60 秒后抛出错误。
如何检索耗时超过一分钟的调用的操作结果?
我正在尝试调用 Apache OpenWhisk 操作(使用 JavaScript SDK)作为远程函数。我想等待函数结果可以在我的应用程序中使用。
这通常通过使用阻塞调用来处理,例如
ow.actions.invoke({name, blocking: true, result: true, params})
...但在这种情况下,该操作需要几分钟才能完成,这会导致 HTTP 连接超时。SDK 在 60 秒后抛出错误。
如何检索耗时超过一分钟的调用的操作结果?
Apache OpenWhisk 只会为阻塞调用保留打开的连接,默认时间限制为 65 秒。此限制由平台配置管理(而不是基于每个用户)。
如果您需要调用和操作并阻止等待结果(对于长时间运行的操作),您需要执行以下操作:
当轮询来自非阻塞调用的激活结果时,您应该强制限制允许的最大轮询时间。这是因为其他情况(例如无效的激活标识符)可能会返回 HTTP 404。强制执行时间限制可确保在应用程序代码或平台出现问题时,轮询循环最终停止!
将最大轮询时间设置为操作超时限制(加上一个小的偏移量)是一个好方法。