Azure WebJobs使您可以轻松地在Microsoft Azure中计划和执行后台任务。 Azure WebJobs SDK通过声明性绑定和触发器管理功能简化了创建后台任务的工作。 然后,可以用三种不同的方式执行Azure WebJob:它们可以连续运行,也可以按预定义的时间表运行,甚至可以按需运行。 在本文中,我们将研究如何在.Net中构建和部署Azure WebJob。
首先,您应确保已安装Visual Studio 2017和所有最新更新。 您还将需要包括Azure功能和Web作业工具在内的Azure SDK。 您可以通过选择工具->获取工具和功能,在Visual Studio中安装Azure开发工具。 通过选择“工具”->“扩展和更新”,可以确保您具有Azure函数和Web作业工具的最新更新。
在Visual Studio中创建一个Azure WebJob项目
假设您已在系统中安装了Visual Studio以及Azure函数和Web作业工具,则可以按照以下步骤在Visual Studio中创建一个新的Azure WebJob项目。
- 打开Visual Studio IDE
- 单击文件->新建->项目
- 在“新建项目”对话框窗口中,选择“云”组
- 从项目模板列表中选择Azure WebJob
- 指定项目的名称和位置,然后单击“确定”保存
这将在Visual Studio中创建一个WebJob项目。 接下来,在“解决方案资源管理器”窗口中右键单击项目,选择“管理解决方案的NuGet软件包”,然后通过NuGet软件包管理器安装以下NuGet软件包的更新。
- Microsoft.Azure.KeyValue.Core
- Microsoft.Azure.WebJobs
- Microsoft.Azure.WebJobs.Core
- Microsoft.Azure.WebJobs.Extensions
在.Net中构建一个简单的Azure WebJob
由于Azure WebJob项目与控制台应用程序相似,因此默认情况下,您的项目将具有Program.cs文件。 该Program.cs文件将包含Main方法-程序的入口点。 您可以在此处指定WebJob的配置元数据。
让我们看一下Program.cs文件中的Main函数。 Main的默认版本如下所示:
static void Main()
{
var config = new JobHostConfiguration();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost(config);
host.RunAndBlock();
}
我们将编辑此默认版本以创建我们自己的Main。 以下代码段说明了如何创建JobHostConfiguration实例和配置WebJob的属性。
static void Main()
{
var config = new JobHostConfiguration();
config.UseTimers();
config.Queues.MaxDequeueCount = 2;
config.Queues.MaxPollingInterval =
TimeSpan.FromSeconds(10);
config.Queues.BatchSize = 10;
var host = new JobHost(config);
host.RunAndBlock();
}
在我们新版的Main中,在配置对象上调用UseTimers()方法,以便我们可以在将要使用的函数中利用计时器。 请注意Queues集合的MaxDequeueCount和MaxPollingInterval属性的用法,该属性与JobHostConfiguration类的实例有关。 MaxDequeueCount用于指定函数在出现错误时将尝试处理特定消息的次数。 (此属性的默认值为5。)MaxPollingInterval用于指定最大轮询间隔,即WebJob在两次队列检查之间等待的最长时间。
这里还有另一个重要的属性值得讨论。 BatchSize属性用于指定WebJob将作为批处理的一部分处理的项目数。 在这里,我们将BatchSize指定为10。因此,如果队列中有10个或更多项目,那么并行处理的项目将不超过10个。
Azure WebJobs的编写功能
在创建的WebJob项目中,将有一个名为Functions.cs的文件,其中包含一个名为Functions的类。 这是该类最初的外观。
public class Functions
{
public static void ProcessQueueMessage([QueueTrigger(“queue”)] string message, TextWriter log)
{
log.WriteLine(message);
}
}
您将不需要调用您在此处编写的函数,因为它们将根据定义的触发器自动调用。 触发器分为三种,即QueueTrigger,ErrorTrigger和TimerTrigger。
这是一个简单的QueueTrigger供您参考。
public static void ProcessQueueMessage([QueueTrigger(“idgmessage”)] string message, TextWriter log)
{
log.WriteLine(“This will execute when there is a message in the queue”);
log.WriteLine(message);
}
这是一个TimerTrigger的简单示例。
公共静态无效ProcessQueueBasedOnTimer([TimerTrigger(“ * / 5 * * * * *”)] TimerInfo计时器)
{
Console.WriteLine(“这应根据时间表执行”);
}
此处显示的TimeTrigger将根据指定的cron表达式定期调用。 cron表达式“ * / 5 * * * * *”表示触发器将每五秒钟触发一次。
部署您的Azure WebJob
创建WebJob及其应执行的功能后,就该将其发布到Azure了。 为此,只需在“解决方案资源管理器”窗口中右键单击该项目,然后选择“发布为Azure WebJob”。 请注意,您应该具有一个可用的Azure Web App来承载WebJob。 您可以选择发布目标为“导入”,然后导入发布配置文件。 或者,您可以选择发布目标为“ Microsoft Azure App Service”,然后按照步骤进行操作。
在开发应用程序时,我们经常会希望以预定的时间间隔自动执行相关任务。 Azure WebJobs提供了一种很好的简单方法,可以在Microsoft Azure云的后台运行计划的作业。
From: https://www.infoworld.com/article/3285971/how-to-work-with-azure-webjobs-in-c.html