提问人:Mihai Socaciu 提问时间:11/15/2023 更新时间:11/17/2023 访问量:79
Azure WebJobs 与 Quartz.NET
Azure WebJobs vs Quartz.NET
问:
如果我的应用程序中有一个 WebJob
项目,并在 Azure 云中设置了 CRON 表达式,如下图所示,那么为什么需要包 Quartz.NET
?
WebJob 项目具有一个继承 BackgroundService 的类,并调用 AddHostedService。
我的发现
1. Quartz.NET
a. 的可能缺点。是否可以将 Quartz.NET 与 Azure 存储队列、表等一起使用?如果没有,这将是一个缺点。
b. Quartz.NET 似乎只关注时间安排。如果我希望后台任务不是从时间触发器触发的,那么 Quartz.NET 没有用?
2. Quartz.NET 的可能优势
我知道您可以使用 Quartz 创建多个工作。在一个简单的 WebJob 中,我必须为每个 Web 作业重复添加 HostedService。
for (int i = 0; i < workerConfiguration.WorkerCount; i++)
{
services.AddHostedService<BackgroundTaskService>();
}
答:
0赞
Suresh Chikkam
11/16/2023
#1
如果应用程序中有一个 WebJob 项目,并且用例是在 Azure 云中设置 CRON 表达式,则可能不需要 .NET Quartz_包,并且该类是 .NET Core 框架的一部分,并提供了一种在托管服务中运行后台任务的方法。BackgroundService
b. Quartz.NET 似乎只关注时间安排。如果我希望后台任务不是从时间触发器触发的,那么 Quartz.NET 没有用?
- Quartz_.NET 可用于计划不由时间触发的后台任务。它可以根据此博客按时间触发和调度 - 将 Quartz.NET 与 ASP.NET Core 和 worker 服务 (andrewlock.net.
一个。是否可以将 Quartz.NET 与 Azure 存储队列、表等一起使用?如果没有,这将是一个缺点。
- Quartz_.NET 提供了一种与不同作业存储(包括 Azure 存储)集成的方法。可以使用该包将作业数据存储在 Azure 表存储中,也可以使用包将作业数据存储在 Azure 存储队列中。
Quartz.Plugins.AzureTable.AdoJobStore
Quartz.Plugins.AzureQueue.AdoJobStore
使用 method 计划具有不同触发器的多个作业。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);
}
}
评论