如何使用石英停止服务

本文关键字:服务 石英停 何使用 | 更新日期: 2023-09-27 18:31:38

我是MSMQ,Quartz和服务新手。我有一个服务,如果引发异常,它将发送通知电子邮件。我正在尝试找到一种方法在发送电子邮件后暂停或停止服务,这样我就不会一遍又一遍地收到相同的异常电子邮件。我只需要一封电子邮件。到目前为止,我已经尝试过:

  1. _调度。DeleteJob(jobKey);
  2. _调度。UnscheduleJob(triggerKey);
  3. _调度。关机();
  4. _调度。中断(作业键);
  5. serviceController.Stop();
  6. serviceController.Pause();
  7. _调度。RescheduleJob(key, exceptionTrigger); <-用间隔时间为零

    的新触发器覆盖我的旧触发器

我的作业和触发器代码按预期工作:

     public void CreateRegistration()
     {
        this._scheduler = StdSchedulerFactory.GetDefaultScheduler();
        CreateJob();
        CreateTrigger();
        RegisterWithScheduler();
     }
     public void CreateJob()
     {
       _scheduler.Start();
       this._job = JobBuilder.Create<RecieveMessageJob>()
                    .WithIdentity("ReceiveMessagesJob",      
                                  this._messageGroupName)
       .Build();
     }
     public void CreateTrigger()
     {
       _trigger = TriggerBuilder.Create()
          .WithIdentity(this._triggerName, this._messageGroupName)
          .StartNow()
          .WithSimpleSchedule(x => x
                .WithIntervalInMinutes(1)
                .RepeatForever())
        .Build();
      }
      public void RegisterWithScheduler()
      {
            _scheduler.ScheduleJob(_job, _trigger);
      }

在我的 ReceiveMessageJob 作业类中,我在执行方法(Execute(IJobExecutionContext context))中查找异常错误,并在需要时调用 PauseService()。在这里,您可以看到我停止或暂停服务的所有各种尝试。

public void PauseService()
{   
  TriggerKey triggerKey = this._trigger.Key;
  JobKey jobKey = this._job.Key;
        // Define a new Trigger 
        //ITrigger exceptionTrigger = TriggerBuilder.Create()
        //      .WithIdentity("exceptionTrigger", this._messageGroupName)
        //      .StartNow()
        //      .WithSimpleSchedule(x => x
        //          .WithIntervalInMinutes(0))
        //      .Build();
        // tell the scheduler to remove the old trigger with the given key, and put the new one in its place
        //_scheduler.RescheduleJob(key, exceptionTrigger);
        //_scheduler.DeleteJob(jobKey);
        //_scheduler.UnscheduleJob(triggerKey);
        //_scheduler.Shutdown();
        //_scheduler.Interrupt(jobKey);
        //ServiceController serviceController = new ServiceController("MessagingService");
        //serviceController.Stop();
        //serviceController.Pause();
    }

我不知道为什么我的尝试都没有奏效。有没有人在我的代码中看到错误或知道不同的方式?提前感谢!

如何使用石英停止服务

我不确定我是否理解调度程序如何绑定到服务。 你是说Windows NT服务吗? 计划程序是否运行启动服务的作业? 无论哪种方式,当服务中出现错误时,只需让服务自行关闭即可。 调度程序与此无关。