【问题标题】:Execute different lambdas based on input根据输入执行不同的 lambda
【发布时间】:2016-12-08 12:58:01
【问题描述】:

我需要 SWF 工作流来触发三个 lambda 函数之一。 SWF 工作流应该接受一些输入并确定和触发适当的 lambda。我怎样才能做到这一点?

【问题讨论】:

    标签: java amazon-web-services amazon-swf


    【解决方案1】:

    如果您使用的是 AWS Flow Framework,那么它看起来像:

    @Execute
    public void myWorkflow(Whatever input) {
       if (match1(input)) {
          lambdaClient.schedleLambdaFunction(name1, input1);
       } else if (match2(input)) {
          lambdaClient.schedleLambdaFunction(name2, input2);
       } else if (match3(input)) {
          lambdaClient.schedleLambdaFunction(name3, input3);
       }
    }
    

    有关详细信息,请参阅AWS Flow Framework for Java Programming Guide
    AWS Flow Framework samples for Amazon SWFAWS Flow Framework Recipes

    【讨论】:

    • 谢谢马克西姆。我只是想确认我需要在这里创建活动工作者还是直接创建工作流工作者并触发相同的?
    • 另外请建议这是否是使用工作流来触发 lambda 函数的正确方法?
    • 当然,如果您的所有活动都可以实现为 lambda 函数,那么这是正确的方法。
    • 使用上面的代码,当我开始我的工作流程时,它总是超时并且 lambda 没有触发。我检查了我的 lambda 的 cloudwatch 日志,但我的 lambda 没有执行。 :(
    • 在 AWS SWF 控制台检查执行历史记录。它是否包含 lamda 相关事件?这些事件在说什么?
    【解决方案2】:

    只要只添加中间操作,就可以按部分构建流。只有当您使用终端操作时,才会真正执行流。例如,参见Processing Data with Java SE 8 Streams, Part 1,“流操作:利用流处理数据”部分:

    可以连接的流操作称为中间操作。它们可以连接在一起,因为它们的返回类型是 Stream。关闭流管道的操作称为终端操作。它们从诸如 List、Integer 甚至 void(任何非 Stream 类型)之类的管道中生成结果。

    您可能想知道为什么区分很重要。好吧,在流管道上调用终端操作之前,中间操作不会执行任何处理;他们很“懒惰”。这是因为中间操作通常可以被终端操作“合并”并处理为单遍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 2020-02-02
      • 2011-05-22
      • 2012-05-28
      • 2020-08-30
      • 2021-02-17
      相关资源
      最近更新 更多