Web Job 是一种在 Azure 中运行后台任务的方式,开发者可以使用它来处理定时任务、文件处理、消息队列(例如 Azure Service Bus 和 Azure Storage Queues)等工作负载。Azure Functions 是一种无服务器计算服务,它可以让你轻松地创建事件驱动的应用程序。在这篇文章中,我们将介绍如何使用 Azure Functions 来开发 Web Job。
创建 Azure Functions
首先,我们需要创建一个 Azure Functions 实例。这可以通过 Azure 门户完成。从 Azure 门户的左侧菜单中选择“Functions”,然后按照向导创建新的实例。选择“HttpTrigger”的模板和 C# 语言进行开发。
准备工作
在你开始开发之前,我们需要进行一些必要的准备工作。首先,我们需要添加以下 NuGet 包:Microsoft.Azure.WebJobs.Extensions.AzureStorage、Microsoft.Azure.WebJobs.Extensions、Microsoft.Azure.WebJobs.Extensions.Http。这些是使用 Azure Functions 所需的基本包。接下来,我们要创建一个名为“WebJobsConfiguration”的类。在该类中,我们将创建所需的依赖项,例如 Azure Storage、ConfigurationManager、TraceWriter 等。
// www.javascriptcn.com code example
public static class WebJobsConfiguration
{
private static readonly Lazy<CloudStorageAccount> StorageAccount = new Lazy<CloudStorageAccount>(() => CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["AzureWebJobsStorage"].ConnectionString));
private static readonly Lazy<JobHostConfiguration> Config = new Lazy<JobHostConfiguration>(() =>
{
var logger = new TraceWriterLogger(NullLogger.Instance, new TraceWriter(TraceLevel.Verbose));
var hostConfig = new JobHostConfiguration
{
StorageConnectionString = StorageAccount.Value.ToString(),
DashboardConnectionString = StorageAccount.Value.ToString(),
TraceWriter = logger
};
return hostConfig;
});
public static JobHostConfiguration Configuration => Config.Value;
}
在这个实例中,我们使用“AzureWebJobsStorage”作为我们的配置文件中的连接字符串。你也可以使用其他名称。我们还将通过“TraceWriterLogger”将 Azure Functions 的输出重定向到 Serilog。你可以参考官方文档,了解如何使用 Serilog。现在我们已经准备好开始创建一个 Webjob。
创建 Webjob
创建一个新的 Azure Functions项目,并在其中添加一个新的function。我们用一个HttpTrigger 的 function 来接受 post 请求,我们将在这个 function 中调用刚刚创建的 Webjob。 在这个项目中,我们创建一个名为“BackgroundJob”的类。
// www.javascriptcn.com code example
namespace AzureFunctionsExample
{
public class BackgroundJob
{
[NoAutomaticTrigger]
public static async Task Run()
{
// Do your work here
}
}
}这个类中的方法将是我们用来执行诸如记账和处理文件等任务的方法。 我们将在 WebJob 项目中创建一个名为“JobRunner”的类,以便在 Azure Functions 中运行后台作业。
// www.javascriptcn.com code example
namespace AzureFunctionsExample
{
public static class JobRunner
{
[FunctionName("JobRunner")]
public static async Task Run([TimerTrigger("0 */5 * * * *", RunOnStartup = true)] TimerInfo timer, TraceWriter log)
{
await RunBackgroundJob(log);
}
public static async Task RunBackgroundJob(TraceWriter log)
{
log.Info($"Running background job at {DateTimeOffset.UtcNow}");
var jobHost = new JobHost(WebJobsConfiguration.Configuration);
await jobHost.CallAsync(typeof(BackgroundJob).GetMethod("Run"));
}
}
}这个类中的 RunBackgroundJob 方法是我们运行任务的方法,它将利用“JobHost”类来运行我们的代码。我们将在此使用 AppStatefulAsyncTaskDispatcher,以便在后台执行代码,并在程序退出时安全地停止作业。
运行 Webjob
现在我们已经创建了我们的 Webjob 并准备好了所有必要的依赖,让我们来尝试运行它。我们可以使用 Visual Studio 和 Azure 应用程序服务工具扩展来部署 WebJobs。
在 Visual Studio 中,打开 Webjob 项目并右键单击“Publish”选项。在弹出的对话框中,选择 Azure Functions 项目实例,然后按照向导设置发布选项。 接下来,在 Azure 门户中导航到新建的 Azure Functions 实例。在左侧菜单中选择“Functions”,然后在窗口右上角单击“+”按钮以添加新函数。创建一个名为“JobRunner”的函数,选择“WebJob”模板,并为该函数提供一个名称。
现在,我们可以为我们的 Webjob 创建一个计划,以便在指定的时间间隔执行。我们可以在 Azure 门户的左侧菜单中选择“WebJobs” ,选择我们刚刚创建的 WebJobs,然后单击“New”以创建一个新的计划。
到目前为止,你已经了解了如何使用 Azure Functions 创建 WebJob,你还可以使用其他 Azure 服务来扩展你的 WebJob。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b6e5fa306f20b3a634db86