c#quartz.net调度作业以在队列中运行

时间:2016-08-29 15:44:25

标签: c# triggers queue quartz.net schedule

我有一个小的后台进程,提供基于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);添加的顺序执行才能实现下一个作业触发。

0 个答案:

没有答案