Topshelf+Quatz.Net的簡單使用

来源:https://www.cnblogs.com/yanfang/archive/2019/11/11/11836521.html
-Advertisement-
Play Games

Topshelf+Quatz.Net的簡單使用 一 Topshelf概述 Topshelf是創建Windows服務的另一種方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通過5個步驟詳細的介紹使用使用Topshelf創建 ...


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  啟動程式

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是ThreadLocal ThreadLocal有點類似於Map類型的數據變數。ThreadLocal類型的變數每個線程都有自己的一個副本,某個線程對這個變數的修改不會影響其他線程副本的值。需要註意的是一個ThreadLocal變數,其中只能set一個值。 線上程1中初始化了一個ThreadLo ...
  • C/C++文件 C/C++程式文件包括 .h .c .hpp .cpp,其中源文件(.c .cpp)是基本的編譯單元,頭文件(.h .hpp)不會被編譯器編譯。 C/C++項目構建(build)過程,分為以下幾個步驟 預處理 → 編譯 → 鏈接。 預編譯 預編譯的過程可以理解為編譯器(實際上是預處理 ...
  • WinForm程式中表單的列可自定義顯示及隱藏,是一種常見的功能,對於用戶體驗來說是非常好的。筆者經過一段時間的摸索,終於實現了自己想要的功能及效果,現記錄一下過程: 1、新建一個自定義控制項,命名為:PopupMenuControl。 2、在PopupMenuControl.Designet文件中的 ...
  • 最近對我的 NPOI 擴展做了一些改變,一方面提高性能,一方面修複bug,增加一些新的功能來讓它更加好用,前幾天發佈了 1.5.0 版本,下麵來介紹一下最近的更新 ...
  • 大家好,今天給大家說明如何在.NET Core中使用Redis,我們在想要辯論程式的好與壞,都想需要一個可視化工具,我經常使用的是一位國內大牛開發的免費工具,其Github地址為: https://github.com/qishibo/AnotherRedisDesktopManager/relea ...
  • 樹形結構數據存儲方案(簡單介紹) 方案1:繼承關係驅動的Schema設計 優點:直觀 缺點:查詢效率低 方案2:基於左右值編碼的Schema設計 優點:查詢效率高,無需遞規 "使用參考" 在方案1的基礎上計算左右值 /// /// 計算樹節點左右值 /// /// 樹節點集合 /// 父節點 /// ...
  • 今天學習下JWT,遇到了兩個坑爹問題,這裡記錄下。在 ASP.NET Core 中,授權的設置方式有兩種,可以使用角色,也可以使用策略,這裡也將簡單舉例角色、策略的使用。 JWT這裡不做介紹,如果想瞭解更多,請看https://www.jianshu.com/p/a12fc67c9e05,https ...
  • 在MVC4中直接可以使用await和async,而MVC3中需要繼承AsyncController,才可以使用。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...