【问题标题】:Wait time in the middle of loop iteration AWS Step Function循环迭代中间的等待时间 AWS Step Function
【发布时间】:2021-03-16 08:15:08
【问题描述】:

我有一个大小约为 10000 条记录的数据数组。我的客户端 API 在一小时内只能处理 1000 条记录,这将引发异常。有什么方法可以在迭代过程中/一旦计数器达到 990 就返回事件并调用引入一小时等待时间的下一步?

等待步骤完成后,我的迭代是否会从中断的地方开始?

【问题讨论】:

  • 我不想要限制/偏移方法

标签: amazon-web-services aws-lambda aws-step-functions serverless-framework-step-functions


【解决方案1】:

选项1:一种方法是使用2个地图状态:

  • 将您的数组转换为数组数组:
[
   [array1] //contains 1000 items,
   [array2]

...
   [arrayn]
]
  • 遍历数组
  • 对于里面的数组再次迭代并调用你的 API
  • 暂停一小时

这里是大体思路,还有很多改进的空间,比如你可以计算API调用花费了多少时间,然后从等待时间中减去等等。

除了 Map 状态,还可以创建一个带有选择状态的 while 循环并实现相同的目的。

{
  "StartAt": "SplitToArayofArrays",
  "States": {
    "SplitToArayofArrays": {
      "Type": "Pass",
      "Result": "Hello",
      "Next": "IterateFristArray "
    },
    "IterateFristArray ": {
      "Type": "Map",
      "ItemsPath": "$.array",
      "ResultPath": "$.array",
      "MaxConcurrency": 1,
      "Next": "Final State",
      "Iterator": {
        "StartAt": "IterateChildArray",
        "States": {
          "IterateChildArray": {
            "Type": "Map",
            "Iterator": {
              "StartAt": "IterateChildArray",
              "States": {
                "IterateChildArray": {
                  "Type": "Pass",
                  "Result": "Hello",
                  "End": true
                }
              }
            },
            "Next": "PauseOneHour"
          },
          "PauseOneHour": {
            "Type": "Wait",
            "Seconds": 3600,
            "End": true
          }
        }
      }
    },
    "Final State": {
      "Type": "Pass",
      "End": true
    }
  }
}

选项 2:一小时内 1000 条记录意味着每 3.6 秒调用一次 API。所以在地图状态下添加一个等待状态3.6秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多