我是MSMQ,Quartz和服务的新手。我有一项服务,如果抛出异常,将发送通知电子邮件。我试图找到一种方法来暂停或停止服务一旦发送电子邮件,所以我不会一遍又一遍地收到相同的例外电子邮件。我只需要一次电子邮件。 到目前为止,我已经尝试过:
我的工作和触发器代码按预期工作:
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();
}
我无法弄清楚为什么我的尝试都没有奏效。有没有人在我的代码中看到错误或知道不同的方式?提前致谢!
答案 0 :(得分:0)
我不确定我是否了解调度程序如何与服务绑定。你的意思是Windows NT服务?调度程序是否运行启动服务的作业?无论哪种方式,当服务中出现错误时,只需将服务自行关闭即可。调度程序与此无关。