我有一个小的后台进程,提供基于Quartz.net lib构建的消息发送服务。
基本问题是作业触发指令.StartNow()
与当前MessageJob
的相同实例一起开始。
而且我不知道如何将同一个GROUP_NAME的作业排队,逐一在FIFO队列中运行。
这是一个很小的样本:
using System;
using Quartz;
using Quartz.Impl;
namespace Messaging
{
class Program
{
static void Main()
{
var scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
for (var i = 0; i < 10; i++)
{
var id = Guid.NewGuid();
var job = JobBuilder.Create<MessageJob>()
.WithIdentity($"job_{id}", "MESSAGING")
.UsingJobData("Text", $"message_{i:D3}")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity($"trigger_{id}", "MESSAGING")
.StartNow()
.Build();
scheduler.ScheduleJob(job, trigger);
}
}
}
public class MessageJob : IJob
{
public string Text { get; set; }
public void Execute(IJobExecutionContext context)
{
var key = context.JobDetail.Key;
Console.WriteLine($"job \'{key}\'. Text: {Text}");
}
}
}
此代码导致单个类型的相同作业之间的竞争条件。
我希望只有MessageJob
的先前实例按scheduler.ScheduleJob(job, trigger);
添加的顺序执行才能实现下一个作业触发。