即使计算已完成,SWF Activity 仍未完成

SWF Activity is not completing even though the computation has finished

我正在测试一个新的 SWF 工作流程,我有一些 activity 可以调用 RESTful 另一个服务。问题是,我可以通过日志记录看到实际调用需要不到一秒的时间才能完成,但是 Activity 在 SWF 中总是超时(START_TO_CLOSE 5 分钟)。更具体地说,RESTful 调用是一个列表调用,当我将批处理大小限制为较小的数字时,Activity 会很快完成并继续进行。但在某个看似任意的阈值时,它会完全窒息。

有没有人对此有任何见解?我读到 SWF 调用的大小限制为 1 MB,有人知道如何找到我的工作人员试图传递 SWF 的数据大小吗?

经过一些远程调试后,发现任务的响应太大,activity 静静地失败了。当框架尝试将响应报告回 SWF 并且 SDK 调用 RespondActivityTaskCompleted 时,会发生失败。 API 对内部 result 参数有长度限制:

Length Constraints: Maximum length of 32768.

这是一个验证错误,会引发未捕获的异常并在内部被吞噬,直到 Activity 超时。

我不建议使用 activity 输入和输出参数来传递大型数据集。 SWF 是一种编排技术,而不是数据传递技术。标准的解决方法是:

  • 将结果存储在单独的存储中(例如 S3)并传递对它的引用。
  • 在机器上本地缓存结果并将所有后续活动路由到同一主机,以便它们可以访问缓存的结果。有关路由方法的详细信息,请参阅 fileprocessing 示例。

顺便说一句。您是否检查过 Cadence 这是 SWF 的开源版本,具有更好的客户端库?