日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net Core小技巧 - Hosted Services + Quartz实现定时任务调度

發布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net Core小技巧 - Hosted Services + Quartz实现定时任务调度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

  之前一直有朋友問,.Net Core + Linux環境有沒有類似Windows服務的東西。其實是有的,我了解的方法有兩種:

  #1 創建一個ASP.Net Core的Web項目(如Web API),然后通過添加中間件(Middleware)的方式來啟動任務;

  #2 創建一個.Net Core的項目,添加Host,Dependency Injection,Configuration等組件,然后通過Main方法或中間件的方式啟動服務。

?

  但是,上述兩種方法都有點不足,如:

  #1 會把Web的生命周期引進來,但實際上,我們并不需要Web的功能,如Controller;

  #2 本身是沒有問題的,但是對開發者的要求相對高一點點,需要對.Net Core的各個組成部分都有一定的認識,簡而言之,門檻有一丟丟高。

?

  .Net Core 2.1推出了一個Generic Host的概念,可以很好的解決上面兩種方法的不足:

  

  至于為什么選擇Quartz來做調度,我想可能是因為情懷吧,因為之前是用的TopShelf+Quartz,其實Hangfire也不錯。

?

使用Hosted Service

1. 創建一個控制臺程序。

?

2. 添加Host Nuget包。

3. 添加一個基于Timer的簡單Hosted Service(用于簡單演示),繼承IHostedService。

4. Main函數中添加Host的相關代碼。

5. 查看結果

?

?

6. 代碼解析

a. Host配置

.ConfigureHostConfiguration(configHost =>

{

  //配置根目錄

  configHost.SetBasePath(Directory.GetCurrentDirectory());?

?

  //讀取host的配置json,和appsetting類似,暫不需要先注釋掉,可根據需要開啟

  //configHost.AddJsonFile("hostsettings.json", true, true);?

?

  //讀取環境變量,Asp.Net core默認的環境變量是以ASPNETCORE_作為前綴的,這里也采用此前綴以保持一致

  configHost.AddEnvironmentVariables("ASPNETCORE_");?

?

  //可以在啟動host的時候之前可傳入參數,暫不需要先注釋掉,可根據需要開啟

  //configHost.AddCommandLine(args);

})

?

b. App配置

.ConfigureAppConfiguration((hostContext, configApp) =>

{

  //讀取應用的配置json

  configApp.AddJsonFile("appsettings.json", true);?

?

  //讀取應用特定環境下的配置json

  configApp.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", true);?

?

  //讀取環境變量

  configApp.AddEnvironmentVariables();?

?

  //可以在啟動host的時候之前可傳入參數,暫不需要先注釋掉,可根據需要開啟

  //configApp.AddCommandLine(args);

})

?

c. 配置服務及依賴注入注冊,注:沒有Middleware的配置了。

.ConfigureServices((hostContext, services) =>
{

  //添加日志Service
  services.AddLogging();

?

  //添加Timer Hosted Service
  services.AddHostedService<TimedHostedService>();
})

?

?d. 日志配置

.ConfigureLogging((hostContext, configLogging) =>
{

  //輸出控制臺日志
  configLogging.AddConsole();

?

  //開發環境輸出Debug日志
  if (hostContext.HostingEnvironment.EnvironmentName == EnvironmentName.Development)
  {
    configLogging.AddDebug();
  }
})

?

e. 使用控制臺生命周期

.UseConsoleLifetime() //使用Ctrl + C退出

?

其它詳細的可參考:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.1

?

使用Quartz

1. 添加Host Nuget包。

Install-Package Quartz -Version 3.0.5Install-Package Quartz.Plugins -Version 3.0.5

?

2. Quartz配置。

之前Quartz的配置是放在quartz.config里面的,但我更喜歡使用appsettings.json,因此,把配置改成了從appsettings.json。

先建一個QuartzOption的類:

3. 重寫JobFactory。

4. 編寫Quartz Hosted Service

5. 準備appsettings.json

6. 編寫一個TestJob

7. 準備Quartz的調度文件quartz_jobs.xml

8. 注冊Quartz Hosted Service和TestJob

9. 查看結果

?

10. 補充說明。

Generic Service默認的環境是Production,如果想使用Development環境,可以在項目屬性的Debug頁簽中添加環境變量來實現。

?

?

?

源碼地址

https://github.com/ErikXu/.NetCoreTips/tree/master/HostedService.Quartz

?便捷使用

https://www.nuget.org/packages/Quartz.HostedService/

https://github.com/ErikXu/Quartz.HostedService

相關文章:

  • ASP.NET Core 2.1 : 十一. 如何在后臺運行一個任務

原文地址: https://www.cnblogs.com/Erik_Xu/p/9219307.html


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結

以上是生活随笔為你收集整理的.Net Core小技巧 - Hosted Services + Quartz实现定时任务调度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。