当前位置: 移动技术网 > IT编程>开发语言>c# > Topshelf+Quatz.Net的简单使用

Topshelf+Quatz.Net的简单使用

2019年11月12日  | 移动技术网IT编程  | 我要评论

topshelf+quatz.net的简单使用

一  topshelf概述

  topshelf是创建windows服务的另一种方法,老外的一篇文章通过5个步骤详细的介绍使用使用topshelf创建windows 服务。是一个开源的跨平台的宿主服务框架,支持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  启动程序

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网