如何每隔90秒触发一次Azure定时器函数?

3
以下是关于如何使用Azure Timer的教程:这里这里(第二个链接中也提到了一些限制)。
但是我需要每90秒触发一次(1分钟30秒)。
我尝试了以下方法,但好像没有起作用:
*/30 */1 * * * * //will trigger every 30 seconds
*/90 * * * * * //will trigger every 60 seconds
30 * * * * * //will trigger each minute start at second 30

那么我如何每90秒触发它?
2个回答

1
您可能需要创建两个具有相同主体但不同计划表达式的函数:
0 0/3 * * * *  // 00:00 03:00 06:00...
30 1/3 * * * * // 01:30 04:30 07:30...

每个函数将在三分钟内运行一次,在它们之间有90秒的偏移量。将主体提取为辅助函数并从两个函数中调用它可能是有意义的。另一个选项是创建一个每30秒触发一次的单个函数,检查当前时间是否是90秒的适当倍数,否则立即返回。

无法同时添加两个“CRON表达式”。 那我就不明白你的意思了... 如果我开始使用两个函数,我应该每30秒调用另一个函数! 在第二个函数中,我应该管理每3个触发器以达到90秒!我甚至可以通过一个函数来实现这一点(当然,我应该使用数据库或类似的东西)。看起来这是一种方法,但我认为应该有更好、更简单的方法。 - Reza Amya
@RezaAmya 我的建议是创建两个具有相同主体但不同cron表达式的函数。每个函数将在3分钟内运行一次,之间有1分30秒的偏移量。 - Mikhail Shilkov
1
这不是一个好的解决方案,因为它会促进逻辑重复,并且如果需要扩展,它的可扩展性会很差。它设计得不好。请查看我的建议答案以获取替代方案。 - Ori

0
这是使用 CRON 无法实现的(如 Mikhail 所述)。然而,在组件之间(在本例中为不同的函数)复制逻辑是极其不推荐的。这实际上是函数平行的已知代码坏味道。通常,对于任何领域,这都不是理想的解决方案(我想原因很清楚)。
我建议创建一个包含所有逻辑的函数,由其他函数触发,这些函数将保留与实际程序逻辑无关的最小逻辑。 您可以选择最适合您的内容,这可以是通过 HTTP 触发器、队列或其他方式完成。 然后,通过其触发器触发此函数的 2 个(或者事实上任意数量的)函数。
例如,您可以创建一个带有 HTTP 触发器的函数,其中包含所有逻辑。 然后,创建 2 个函数,每个函数使用不同的 CRON 表达式触发。两个函数将只是调用 HTTP 调用触发“逻辑”函数。
对于您特定的 90 秒需求,您可以使用已经建议了的这些 CRON 表达式(每个“触发器”函数一个)。
0 0/3 * * * * 
30 1/3 * * * *

1
你仍然在创建两个具有相同主体的函数,因此答案是相同的 :) 我并没有建议复制粘贴50行的主体。在预编译函数的世界中,它们可能是调用相同私有方法的一行代码。 - Mikhail Shilkov
创建2个或更多“触发”函数,只是作为另一个具有实际逻辑的函数的触发器,并不等同于具有重复相同逻辑的2个(或更多)函数。您现在扩展了原始建议,使两个函数都调用相同的私有方法,这在您的原始答案中没有提到。由于原始问题要求每90个问题运行一次函数(而不是某些私有方法),因此我的建议仍然保持并回答了确切的规格,同时具有扩展未来修改和更多触发器的选项。 - Ori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接