2

我正在尝试调用 Apache OpenWhisk 操作(使用 JavaScript SDK)作为远程函数。我想等待函数结果可以在我的应用程序中使用。

这通常通过使用阻塞调用来处理,例如

ow.actions.invoke({name, blocking: true, result: true, params})

...但在这种情况下,该操作需要几分钟才能完成,这会导致 HTTP 连接超时。SDK 在 60 秒后抛出错误。

如何检索耗时超过一分钟的调用的操作结果?

4

1 回答 1

1

Apache OpenWhisk 只会为阻塞调用保留打开的连接,默认时间限制为 65 秒。此限制由平台配置管理(而不是基于每个用户)。

如果您需要调用和操作并阻止等待结果(对于长时间运行的操作),您需要执行以下操作:

  • 使用非阻塞调用来调用操作。
  • 使用返回的激活标识轮询激活结果 API。
  • 激活结果的 HTTP 响应将返回 HTTP 404 响应,直到操作完成。

当轮询来自非阻塞调用的激活结果时,您应该强制限制允许的最大轮询时间。这是因为其他情况(例如无效的激活标识符)可能会返回 HTTP 404。强制执行时间限制可确保在应用程序代码或平台出现问题时,轮询循环最终停止!

将最大轮询时间设置为操作超时限制(加上一个小的偏移量)是一个好方法。

于 2019-05-15T08:17:59.370 回答