Azure WebJobs 与 Quartz.NET

问题描述 投票:0回答:1

如果我的应用程序中有一个

WebJob
项目,并在 Azure Cloud 中设置 CRON 表达式,如下图所示,那么为什么我需要该包
Quartz.NET

WebJob项目有一个继承BackgroundService的类,并调用AddHostedService。

我的发现

1。 Quartz.NET 可能存在的缺点
A。我可以将 Quartz.NET 与 Azure 存储队列、表等一起使用吗?如果没有,这将是一个缺点。
b. Quartz.NET 似乎只专注于时间调度。如果我想要一个后台任务不从时间触发器触发,那么 Quartz.NET 没有用?

2。 Quartz.NET 可能的优势
我知道您可以使用 Quartz 创建多个工作。在一个简单的 WebJob 中,我必须为每个作业重复添加 HostedService。

for (int i = 0; i < workerConfiguration.WorkerCount; i++)
{
   services.AddHostedService<BackgroundTaskService>();
}
c# asp.net azure-webjobs quartz.net background-service
1个回答
0
投票

如果您的应用程序中有一个 WebJob 项目,并且您的用例是在 Azure Cloud 中设置 CRON 表达式,那么您可能不需要 Quartz_.NET 包,并且

BackgroundService
类是 .NET Core 框架的一部分,并且提供了一种在托管服务中运行后台任务的方法。

b. Quartz.NET 似乎只专注于时间调度。如果我想要一个后台任务不从时间触发器触发,那么 Quartz.NET 没有用?

a.我可以将 Quartz.NET 与 Azure 存储队列、表等一起使用吗?如果没有,这将是一个缺点。

  • Quartz_.NET 提供了一种与不同作业存储(包括 Azure 存储)集成的方法。您可以使用
    Quartz.Plugins.AzureTable.AdoJobStore
    包将作业数据存储在 Azure 表存储中,也可以使用
    Quartz.Plugins.AzureQueue.AdoJobStore
    包将作业数据存储在 Azure 存储队列中。

使用

IScheduler.ScheduleJob
方法来调度具有不同触发器的多个作业。

这是一个例子:

using Microsoft.Extensions.Hosting;
using Quartz;
using System;
using System.Threading;
using System.Threading.Tasks;

public class QuartzHostedService : IHostedService
{
    private readonly IScheduler _scheduler;

    public QuartzHostedService(IScheduler scheduler)
    {
        _scheduler = scheduler;
    }

    public async Task StartAsync(CancellationToken cancellationToken)
    {
        await _scheduler.Start(cancellationToken);

        // Schedule Job1 every 5 minutes
        var job1 = JobBuilder.Create<Job1>()
            .WithIdentity("job1", "group1")
            .Build();

        var trigger1 = TriggerBuilder.Create()
            .WithIdentity("trigger1", "group1")
            .WithCronSchedule("0 0/5 * * * ?")
            .Build();

        await _scheduler.ScheduleJob(job1, trigger1, cancellationToken);

        // Schedule Job2 every 10 minutes
        var job2 = JobBuilder.Create<Job2>()
            .WithIdentity("job2", "group1")
            .Build();

        var trigger2 = TriggerBuilder.Create()
            .WithIdentity("trigger2", "group1")
            .WithCronSchedule("0 0/10 * * * ?")
            .Build();

        await _scheduler.ScheduleJob(job2, trigger2, cancellationToken);
    }

    public async Task StopAsync(CancellationToken cancellationToken)
    {
        await _scheduler.Shutdown(cancellationToken);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.