Topshelf+Quatz.Net的簡單使用

Topshelf+Quatz.Net的簡單使用

一  Topshelf概述

  Topshelf是建立Windows服務的另外一種方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf經過5個步驟詳細的介紹使用使用Topshelf建立Windows 服務。Topshelf是一個開源的跨平臺的宿主服務框架,支持Windows和Mono,只須要幾行代碼就能夠構建一個很方便使用的服務宿主。windows

二  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接口便可。async

  對於小型應用,能夠集成到你的系統中,對於企業級系統,它提供了Routing支持,提供了Group來組織和管理任務,此外還有持久化、插件功能、負載均衡和故障遷移等知足不一樣應用場景的須要。ui

四  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  啓動程序

相關文章
相關標籤/搜索