如何使用石英停止服务
本文关键字:服务 石英停 何使用 | 更新日期: 2023-09-27 18:31:38
我是MSMQ,Quartz和服务新手。我有一个服务,如果引发异常,它将发送通知电子邮件。我正在尝试找到一种方法在发送电子邮件后暂停或停止服务,这样我就不会一遍又一遍地收到相同的异常电子邮件。我只需要一封电子邮件。到目前为止,我已经尝试过:
- _调度。DeleteJob(jobKey);
- _调度。UnscheduleJob(triggerKey);
- _调度。关机();
- _调度。中断(作业键);
- serviceController.Stop();
- serviceController.Pause();
- _调度。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服务吗? 计划程序是否运行启动服务的作业? 无论哪种方式,当服务中出现错误时,只需让服务自行关闭即可。 调度程序与此无关。