石英。 NET是一个功能齐全的开源作业调度系统,可以从最小的应用程序到大型企业系统使用。
运行项目
启动Scheduler和Receiver项目。 启动时,Scheduler将安排每3秒向Receiver发送一条消息。 接收方将处理消息。
代码演练
上下文帮助程序
公共静态类QuartzContextExtensions { 公共静态IEndpointInstance EndpointInstance(此IJobExecutionContext上下文) { return(IEndpointInstance)上下文。 调度程序。 上下文[“EndpointInstance”]; } 公共静态void SetEndpointInstance(此IScheduler调度程序,IEndpointInstance实例) { 调度程序。 Context[“EndpointInstance”]=实例; } }
配置并启动调度程序
var endpointInstance=等待端点。 开始(endpointConfiguration); 日志提供程序。 SetCurrentLogProvider(新QuartzConsoleLogProviders()); var schedulerFactory=新的标准调度工厂(); var scheduler=等待调度程序工厂。 GetScheduler(); //将endpointInstance注入调度程序上下文 调度程序。 设置端点实例(端点实例); 等待调度程序。 开始();
作业定义
公共类SendMessageJob: IJob公司 { 公共异步任务执行(IJobExecutionContext上下文) { 尝试 { var endpointInstance=上下文。 端点实例(); var消息=新MyMessage(); 等待endpointInstance。 发送(“Samples.QuartzScheduler.Receiver”,消息); } catch(异常异常) { 慰问。 WriteLine($“执行失败:{exception.Message}”); //TODO:处理异常,不抛出。 //考虑安装断路器 投掷; } } }
安排作业
//定义作业并将其绑定到SendMessageJob类 var job=作业生成器。 创建<发送消息作业>() .WithIdentity(“job1”,“group1”) .Build(); //触发作业立即运行,然后每3秒重复一次 var触发器=TriggerBuilder。 创建() .WithIdentity(“触发器1”,“组1”) .StartNow() .带简单计划( 操作:生成器=> { 建设者 .WithIntervalInSeconds(3) .RepeatForever(); }) .Build(); //告诉石英使用触发器安排工作 等待调度程序。 ScheduleJob(作业、触发器);
清理
等待调度程序。 关机(); 等待endpointInstance。 停止();
异常处理
每个侦听器方法都应该包含一个try-catch块,用于处理所有可能的异常。 如果监听器抛出异常,可能会导致其他监听器没有得到通知和/或阻止作业的执行等。