【问题标题】:Azure WebJobs - multiple jobs different scheduling times in one deployAzure WebJobs - 一次部署中的多个作业不同的调度时间
【发布时间】:2016-03-18 09:57:55
【问题描述】:

我正在尝试在 Azure 上部署 WebJobs,其中只有一个 WebJob 持续运行。

希望正确执行具有不同时间安排的多个作业。因此,如果一项作业每小时运行一次,而其他每 10 分钟运行一次,我如何在不将值硬编码到代码或 web.config 中的情况下实现这一目标?

如果这不是他们的方式,那么最佳方式是什么?

【问题讨论】:

  • 您能否提供更多信息,例如您的网络作业是如何被触发的?是队列触发器、blob 触发器还是其他什么?

标签: azure azure-webjobs


【解决方案1】:

您可以使用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!");
}

【讨论】:

  • 如果其他人想知道什么版本的 SDK 定义了 TimerTriggerAttribute 类,它位于一个名为 Microsoft.Azure.WebJobs.Extensions 的单独 Nuget 包中。
  • 在最新版本上,您需要安装 Microsoft.Azure.WebJobs.Extensions nuget 包。让我知道你是否足够
【解决方案2】:

您可以连续运行一个 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 的,断开的数据库连接等)

【讨论】:

  • 是否有可能使用任何注释,您可以在其中设置网络作业本身的调度程序?所以基本上你将 webjob 设置为连续操作,它在内部运行取决于注释
  • 正如@Thomas 所说,您可以安装扩展程序github.com/Azure/azure-webjobs-sdk-extensions
猜你喜欢
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多