Azure WebJobs - 一次部署中的多个作业不同的调度时间
Azure WebJobs - multiple jobs different scheduling times in one deploy
我正在尝试在 Azure 上部署 WebJobs,其中连续只有一个 WebJob 运行。
想要实现对具有不同时间安排的多个作业的正确执行。因此,如果一项工作是 运行 每小时一次,而其他工作是每 10 分钟一次,我如何在不将值硬编码到代码或 web.config 的情况下实现这一目标?
如果这不是他们的方式,最佳方式是什么?
您可以有一个连续的 WebJob 运行。该作业将包含各种功能,每个功能都在队列中侦听消息,例如:
public static void ProcessHourlyTask([QueueTrigger("hourlytaskqueue")] string message, TextWriter log)
{
//do work
}
public static void ProcessDailyTask([QueueTrigger("daytaskqueue")] string message, TextWriter log)
{
//do work
}
您可以使用 Azure 调度程序在适当的时间将消息放入适当的队列中。然后激活与该触发器关联的 WebJob 方法。
或者您可以有一个队列,其中队列消息内容决定调用哪个方法。
我不确定你所说的最佳是什么意思,但根据我使用队列的经验,它非常简单并且效果很好,尤其是因为失败的消息会被重试(我认为是 7 次),这很好,因为很多错误Azure(503、丢弃的数据库连接等)
您可以使用 TimerTriggerAttribute
:
// Triggered every hours
public static void HourlyTimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo, TextWriter log)
{
log.WriteLine("Scheduled job fired!");
}
// Triggered every 10 minutes
public static void MinutelyTimerJob([TimerTrigger("00:00:10")] TimerInfo timerInfo, TextWriter log)
{
log.WriteLine("Scheduled job fired!");
}
我正在尝试在 Azure 上部署 WebJobs,其中连续只有一个 WebJob 运行。
想要实现对具有不同时间安排的多个作业的正确执行。因此,如果一项工作是 运行 每小时一次,而其他工作是每 10 分钟一次,我如何在不将值硬编码到代码或 web.config 的情况下实现这一目标?
如果这不是他们的方式,最佳方式是什么?
您可以有一个连续的 WebJob 运行。该作业将包含各种功能,每个功能都在队列中侦听消息,例如:
public static void ProcessHourlyTask([QueueTrigger("hourlytaskqueue")] string message, TextWriter log)
{
//do work
}
public static void ProcessDailyTask([QueueTrigger("daytaskqueue")] string message, TextWriter log)
{
//do work
}
您可以使用 Azure 调度程序在适当的时间将消息放入适当的队列中。然后激活与该触发器关联的 WebJob 方法。
或者您可以有一个队列,其中队列消息内容决定调用哪个方法。
我不确定你所说的最佳是什么意思,但根据我使用队列的经验,它非常简单并且效果很好,尤其是因为失败的消息会被重试(我认为是 7 次),这很好,因为很多错误Azure(503、丢弃的数据库连接等)
您可以使用 TimerTriggerAttribute
:
// Triggered every hours
public static void HourlyTimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo, TextWriter log)
{
log.WriteLine("Scheduled job fired!");
}
// Triggered every 10 minutes
public static void MinutelyTimerJob([TimerTrigger("00:00:10")] TimerInfo timerInfo, TextWriter log)
{
log.WriteLine("Scheduled job fired!");
}