【问题标题】:How do I Stop a service with Quartz?如何使用 Quartz 停止服务?
【发布时间】:2016-05-01 05:23:32
【问题描述】:

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

  1. _scheduler.DeleteJob(jobKey);
  2. _scheduler.UnscheduleJob(triggerKey);
  3. _scheduler.Shutdown();
  4. _scheduler.Interrupt(jobKey);
  5. serviceController.Stop();
  6. serviceController.Pause();
  7. _scheduler.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();
    }

我不明白为什么我的尝试都没有奏效。有没有人看到我的代码有问题或知道不同的方式?提前致谢!

【问题讨论】:

    标签: c# service quartz-scheduler msmq quartz.net


    【解决方案1】:

    我不确定我是否了解调度程序与服务的关系。您的意思是Windows NT 服务吗?调度程序是否运行启动服务的作业?无论哪种方式,当服务出现错误时,只需让服务自行关闭即可。调度程序与此无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 2018-01-02
      • 2017-03-17
      • 1970-01-01
      相关资源
      最近更新 更多