【发布时间】:2016-05-01 05:23:32
【问题描述】:
我是 MSMQ、Quartz 和服务的新手。如果抛出异常,我有一项服务将发送通知电子邮件。我正在尝试找到一种方法来在发送电子邮件后暂停或停止服务,这样我就不会一遍又一遍地收到相同的异常电子邮件。我只需要电子邮件一次。 到目前为止,我已经尝试过:
- _scheduler.DeleteJob(jobKey);
- _scheduler.UnscheduleJob(triggerKey);
- _scheduler.Shutdown();
- _scheduler.Interrupt(jobKey);
- serviceController.Stop();
- serviceController.Pause();
- _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