【问题标题】:Step function lambda that executes different tasks generically and on different intervals阶梯函数 lambda,一般地以不同的时间间隔执行不同的任务
【发布时间】:2021-12-28 12:05:16
【问题描述】:

所以我正在编写一个作为步进函数一部分的 Lambda,这个 lambda 正在获取任务名称的映射以及执行它的时间间隔,例如 -("task1",5) --> task1 将是每 5 分钟执行一次。此 lambda 函数在步进机的循环条件内,并且可能循环 24 小时。在步进函数循环的每次迭代中,它等待 5 分钟。这意味着 5 分钟是我的执行迭代。在这种情况下,我们知道“task1”实际上应该在每次迭代中执行。在下面的示例中,我也有 ("task2",60) - 此任务应每 12 次迭代执行一次。我目前的 Lambda 代码如下所示:

protected Map<String, Object> customHandleLambdaRequest(Map<String, Object> inputMap, Context context) throws Exception {

    Map<String, Object> tasks = (Map<String, Object>) inputMap.get("tasks");
    if (tasks.isEmpty()) {
        return inputMap;
    }

    int tick = (int) inputMap.get("tick");
    tick = tick + 5;
    inputMap.put("tick", tick);

    if (tasks.containsKey("task1") || isEvenlyDividable((int) tasks.get("task1"),tick)) {
        //do something
    }

    if (tasks.containsKey("task2") || isEvenlyDividable((int) tasks.get("task2"),tick)) {
        //do something
    }

    return inputMap;
}

问题是,我不断添加许多任务,最终得到一个看起来像一个大“如果”(丑陋)的代码。我对堆栈溢出代码向导的问题是:

  1. 如何使这段代码更通用,并且不具备所有这些 if 条件?
  2. 我想准确地遵守我的间隔时间,执行所有任务可能需要几秒钟,这反过来会导致我的下一次迭代延迟几秒钟,您是否建议我对第一次迭代时间进行采样并保持那是我的五分钟指南针?

【问题讨论】:

    标签: java aws-lambda aws-step-functions


    【解决方案1】:

    制作额外的 lambda。

    我知道这听起来很遗憾,但这是公认的最佳做法。

    每个 lambda 应该是一个自包含的任务,仅在需要时调用。如果您有很多不同的场景,那么制作额外的 lambda 并在您的状态机中放置一个选择任务以确定要调用哪个 lambda。

    【讨论】:

    • 谢谢。不幸的是,我还有其他限制阻止我创建不同的 Lambda,所以我必须在一个 Lambda 中解决这个问题。
    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多