【发布时间】: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;
}
问题是,我不断添加许多任务,最终得到一个看起来像一个大“如果”(丑陋)的代码。我对堆栈溢出代码向导的问题是:
- 如何使这段代码更通用,并且不具备所有这些 if 条件?
- 我想准确地遵守我的间隔时间,执行所有任务可能需要几秒钟,这反过来会导致我的下一次迭代延迟几秒钟,您是否建议我对第一次迭代时间进行采样并保持那是我的五分钟指南针?
【问题讨论】:
标签: java aws-lambda aws-step-functions