Quartz.NET持久化及客户端服务器模式

持久化

Quartz.NET如果不进行数据库相关配置,,则默认的执行模式为内存模式,优点是执行速度快,确定就是数据无法存储,宕机了需要重新开始。

持久化只需要做如下配置(以SQLServer为例)

NameValueCollection properties = new NameValueCollection();//存储类型properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";//表明前缀properties["quartz.jobStore.tablePrefix"] = "QRTZ_";//驱动类型properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";//数据源名称properties["quartz.jobStore.dataSource"] = "myDS";//连接字符串properties["quartz.dataSource.myDS.connectionString"] = @"Data Source=(local);Initial Catalog=quartz;User ID=sa;Password=123";//sqlserver版本properties["quartz.dataSource.myDS.provider"] = "SqlServer-20";

客户端服务器模式 Quartz.NET支持TCP的通信,所以可以有这样的架构场景:用服务器承载持久化下来的所有任务并持续执行,想添加任务可通过客户端管理工具来向服务器数据库添加任务(当然是调用Quartz.NET框架里的方法),这样就可以产生了任务调度服务。

服务器代码例子:

public class RemoteServerExample {public static void Run(){ILog log = LogManager.GetLogger(typeof(RemoteServerExample));NameValueCollection properties = new NameValueCollection();<span style="font-family: Arial, Helvetica, sans-serif;">properties["quartz.scheduler.instanceName"] = "RemoteServer";</span>properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";properties["quartz.threadPool.threadCount"] = "5";properties["quartz.threadPool.threadPriority"] = "Normal";// 设置服务器properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";properties["quartz.scheduler.exporter.port"] = "555";properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";properties["quartz.scheduler.exporter.channelType"] = "tcp";properties["quartz.scheduler.exporter.channelName"] = "httpQuartz";// 拒绝远程//properties["quartz.scheduler.exporter.rejectRemoteRequests"] = "true";//存储类型properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";//表明前缀properties["quartz.jobStore.tablePrefix"] = "QRTZ_";//驱动类型properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";//数据源名称properties["quartz.jobStore.dataSource"] = "myDS";//连接字符串properties["quartz.dataSource.myDS.connectionString"] = @"Data Source=(local);Initial Catalog=quartz;User ID=sa;Password=123";//sqlserver版本properties["quartz.dataSource.myDS.provider"] = "SqlServer-20";ISchedulerFactory sf = new StdSchedulerFactory(properties);IScheduler sched = sf.GetScheduler();sched.Start();log.Info("——- 服务器启动 —————–");Thread.Sleep(TimeSpan.FromMinutes(5));//sched.Shutdown(true);log.Info("——- 服务器关闭 —————–");SchedulerMetaData metaData = sched.GetMetaData();log.Info("执行次数 " + metaData.NumberOfJobsExecuted );}} 客户端代码例子 [PersistJobDataAfterExecution][DisallowConcurrentExecution]public class SimpleJob : IJob{public const string Message = "msg";private static readonly ILog log = LogManager.GetLogger(typeof (SimpleJob));public virtual void Execute(IJobExecutionContext context){JobKey jobKey = context.JobDetail.Key;string message = context.JobDetail.JobDataMap.GetString(Message);log.InfoFormat("{0} 执行时间 {1}", jobKey, DateTime.Now.ToString());log.InfoFormat("msg: {0}", message);}} public class RemoteClientExample{public static void Run(){ILog log = LogManager.GetLogger(typeof (RemoteClientExample));NameValueCollection properties = new NameValueCollection();properties["quartz.scheduler.instanceName"] = "RemoteClient";// 设置线程池properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";properties["quartz.threadPool.threadCount"] = "5";properties["quartz.threadPool.threadPriority"] = "Normal";// 设置远程连接properties["quartz.scheduler.proxy"] = "true";properties["quartz.scheduler.proxy.address"] = "tcp://127.0.0.1:555/QuartzScheduler";ISchedulerFactory sf = new StdSchedulerFactory(properties);IScheduler sched = sf.GetScheduler();IJobDetail job = JobBuilder.Create<SimpleJob>().WithIdentity("remotelyAddedJob", "default").Build();JobDataMap map = job.JobDataMap;map.Put("msg", "信息");ITrigger trigger = TriggerBuilder.Create().WithIdentity("remotelyAddedTrigger", "default").ForJob(job.Key).WithCronSchedule("/5 * * ? * *").Build();sched.ScheduleJob(job, trigger);log.Info("向服务器添加计划任务");}public string Name{get { return null; }}}服务器如果是单机运行的话,一旦宕机就可能会出现业务问题,所以Quartz.NET提供了集群配置,这将在下一篇学习。

会得到最大的满足,因为它填补了你的空虚。

Quartz.NET持久化及客户端服务器模式

相关文章:

你感兴趣的文章:

标签云: