当前位置:
首页 > temp > 简明python教程 >
-
Topshelf+Quatz.Net的简单使用
一 Topshelf概述
Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务。Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。
二 Topshelf使用
1 新建Timer定时任务,并在Topshelf中使用
1 public class TownCrier 2 { 3 private readonly Timer timer; 4 public TownCrier() 5 { 6 timer = new Timer(1000) { AutoReset = true }; 7 timer.Elapsed += (sender,eventArgs) => Console.WriteLine($"It is {DateTime.Now} and all is well"); 8 } 9 public void Start() 10 { 11 timer.Start(); 12 } 13 public void Stop() 14 { 15 timer.Stop(); 16 } 17 18 } 19 20 static void Main(string[] args) 21 { 22 HostFactory.Run(x => 23 { 24 x.Service<TownCrier>(s => 25 { 26 s.ConstructUsing(name => new TownCrier()); 27 s.WhenStarted(tc => tc.Start()); 28 s.WhenStopped(tc => tc.Stop()); 29 }); 30 x.RunAsLocalSystem(); 31 x.SetDescription("QuartzNet任务调度服务,灵活配置任务计划"); 32 x.SetDisplayName("QuartzJobShedule"); 33 x.SetServiceName("Quartz任务调度框架"); 34 } 35 ); 36 }
2 执行程序,正常运行,效果如下
三 Quartz.Net概述
在项目的开发过程中,难免会遇见后需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,这个时候可以使用Quartz.Net。
Quartz.Net是纯净的,它是一个.Net程序集,是非常流行的Java作业调度系统Quartz的C#实现。
Quartz.Net是一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。功能齐全体现在触发器的多样性上面,即支持简单的定时器,也支持Cron表达式;即能执行重复的作业任务,也支持指定例外的日历;任务也可以是多样性的,只要继承IJob接口即可。
对于小型应用,可以集成到你的系统中,对于企业级系统,它提供了Routing支持,提供了Group来组织和管理任务,此外还有持久化、插件功能、负载均衡和故障迁移等满足不同应用场景的需要。
四 Quartz.Net使用
1 创建一个任务,继承IJob接口
1 /// <summary> 2 /// 继承IJob的一个任务 3 /// </summary> 4 public class HelloQuartzJob : IJob 5 { 6 public Task Execute(IJobExecutionContext context) 7 { 8 return Task.Factory.StartNew(() => 9 { 10 Console.WriteLine("Hello Quartz.Net"); 11 }); 12 } 13 }
2 在程序启动时创建调度器(Scheduler),并添加HelloQuartzJob的调度
1 static async Task Main(string[] args) 2 { 3 //从工厂中获取调度器实例 4 var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); 5 6 //创建作业和触发器 7 var jobDetail = JobBuilder.Create<HelloQuartzJob>().Build(); 8 var trigger = TriggerBuilder.Create() 9 .WithSimpleSchedule(m => 10 { 11 m.WithRepeatCount(10).WithIntervalInSeconds(1); 12 }) 13 .Build(); 14 15 Console.WriteLine($"任务调度器已启动"); 16 17 //添加调度 18 await scheduler.ScheduleJob(jobDetail, trigger); 19 20 await scheduler.Start(); 21 Console.ReadKey(); 22 }
3 执行结果
五 Topshelf+Quartz.Net
1 创建Quartz的调度器类,实现Start和Stop方法
1 public class JobConfigure 2 { 3 private IScheduler scheduler; 4 5 public async Task GetJobConfigure() 6 { 7 //从工厂中获取调度器实例 8 scheduler = await StdSchedulerFactory.GetDefaultScheduler(); 9 //创建作业和触发器 10 var jobDetail = JobBuilder.Create<HelloQuartzJob>().Build(); 11 var trigger = TriggerBuilder.Create().WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(1).WithRepeatCount(10)) 12 .Build(); 13 //添加调度 14 await scheduler.ScheduleJob(jobDetail, trigger); 15 } 16 17 public void Start() 18 { 19 this.GetJobConfigure().Wait(); 20 scheduler.Start(); 21 } 22 public void Stop() 23 { 24 scheduler.Shutdown(true); 25 } 26 27 }
2 在启动程序中创建调度器(Scheduler),并添加JobConfigure的调度
1 static void Main(string[] args) 2 { 3 HostFactory.Run(x => 4 { 5 x.Service<JobConfigure>(s => 6 { 7 s.ConstructUsing(name => new JobConfigure()); 8 s.WhenStarted(tc => tc.Start()); 9 s.WhenStopped(tc => tc.Stop()); 10 }); 11 x.RunAsLocalSystem(); 12 x.SetDescription("QuartzNet任务调度服务,灵活配置任务计划"); 13 x.SetDisplayName("QuartzJobShedule"); 14 x.SetServiceName("Quartz任务调度框架"); 15 } 16 ); 17 }
3 启动程序
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数