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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】)

發(fā)布時(shí)間:2023/12/10 asp.net 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.?IIS部署

  比如在MVC框架中集成了Quartz.Net定時(shí)調(diào)度,此時(shí)該調(diào)度系統(tǒng)會(huì)隨著MVC框架被掛在IIS下,IIS會(huì)進(jìn)程回收,所以大部分開發(fā)都會(huì)遇到Quartz掛在IIS下一段時(shí)間不好用。

  補(bǔ)充:IIS可以設(shè)置定時(shí)自動(dòng)回收,默認(rèn)回收是1740分鐘,也就是29小時(shí)。IIS自動(dòng)回收相當(dāng)于服務(wù)器IIS重啟,應(yīng)用程序池內(nèi)存清空,所有數(shù)據(jù)被清除,相當(dāng)于IIS重啟,在度量快速開發(fā)平臺(tái)服務(wù)器端,為了減小數(shù)據(jù)庫(kù)負(fù)擔(dān),內(nèi)存中暫存了很多信息,不適合頻繁的回收,因?yàn)榛厥諘?huì)造成服務(wù)器端所有存在內(nèi)存中的數(shù)據(jù)丟失,如果沒(méi)有及時(shí)保存到數(shù)據(jù)庫(kù)中,可能導(dǎo)致程序出現(xiàn)問(wèn)題。而如果系統(tǒng)使用高峰時(shí)期,并不適合回收,回收可能導(dǎo)致幾十秒IIS無(wú)響應(yīng),對(duì)于正在工作的人員來(lái)說(shuō),是一種很不好的體驗(yàn),會(huì)以為是網(wǎng)絡(luò)或者掉線等問(wèn)題。

  解決方案:關(guān)閉該項(xiàng)目在IIS上對(duì)應(yīng)的進(jìn)程池的回收機(jī)制。

  如何關(guān)閉進(jìn)程池的回收機(jī)制:選中IIS中部署的項(xiàng)目對(duì)應(yīng)的進(jìn)程池,點(diǎn)擊【高級(jí)設(shè)置】,里面有5個(gè)核心參數(shù):

    ① 發(fā)生配置更改時(shí)禁止回收:如果為True,應(yīng)用程序池在發(fā)生配置更改時(shí)將不會(huì)回收。

    ② 固定時(shí)間間隔(分鐘):超過(guò)設(shè)置的時(shí)間后,應(yīng)用程序池回收,設(shè)置為:0 意味著應(yīng)用程序池不回收。系統(tǒng)默認(rèn)設(shè)置的時(shí)間是1740(29小時(shí))。

    ③ 禁用重疊回收:如果為true,將發(fā)生應(yīng)用程序池回收,以便在創(chuàng)建另一個(gè)工作進(jìn)程之前退出現(xiàn)有工作進(jìn)程

    ④ 請(qǐng)求限制:應(yīng)用程序池在回收之前可以處理的最大請(qǐng)求數(shù)。如果值為0,則表示應(yīng)用程序池可以處理的請(qǐng)求數(shù)沒(méi)有限制。

    ⑤ 生成回收事件日志條目:每發(fā)生一次指定的回收事件時(shí)便產(chǎn)生一個(gè)事件日志條目。

?  ?總結(jié):即使可以將IIS進(jìn)程池回收關(guān)掉,仍然不建議把Quartz掛到IIS下,長(zhǎng)時(shí)間不回收,會(huì)存在內(nèi)存溢出的問(wèn)題。

?

二. C/S程序直接運(yùn)行

  我們可以用控制臺(tái)的形式或者Winform的形式單獨(dú)做一套定時(shí)調(diào)度系統(tǒng),與主框架分類,也便于維護(hù),可以直接將exe程序或者Winform窗體程序在服務(wù)器上運(yùn)行。

  總結(jié):該方法不存在回收的問(wèn)題,但直接在服務(wù)器上運(yùn)行,容易不小心被運(yùn)維人員關(guān)掉了。

  對(duì)于專業(yè)一點(diǎn)的人員來(lái)說(shuō),該方案,直接運(yùn)行程序太Low了,所以通常是將exe程序發(fā)不成windows服務(wù),通過(guò)服務(wù)的開啟和關(guān)閉來(lái)?維護(hù)。

?

三.?借助topshelf來(lái)進(jìn)行的windows服務(wù)部署?

  官網(wǎng):http://topshelf-project.com/ , 這是一種通用的發(fā)布服務(wù)的方式,步驟如下:

  1. 通過(guò)NuGet下載 Topshelf 的程序集

  2. 配置QuartzService類,充當(dāng)定時(shí)任務(wù)的服務(wù)端程序

    ①:構(gòu)造函數(shù)中執(zhí)行定時(shí)調(diào)度任務(wù)

    ②:Start()方法控制調(diào)度的開啟 (必填)

    ③:Stop()方法控制調(diào)度的關(guān)閉 (必填)

    ④:Pause()方法暫停調(diào)度 (選填)

    ⑤:Continue()方法繼續(xù)調(diào)度 (選填)

    ⑥:Shutdown() 關(guān)閉 (需要支持)

  3. 在主程序中通過(guò)topshelf代碼調(diào)用: HostFactory.Run 詳見(jiàn)主程序。(在里面可以設(shè)置服務(wù)的名稱、描述等

  4. 通過(guò)指令進(jìn)行服務(wù)發(fā)布和卸載(查看windows服務(wù):services.msc)

   ①:通過(guò)cmd命令定位到bin文件目錄下(以管理員身份運(yùn)行)

    (eg: 先輸入 d: 切換到D盤,再執(zhí)行下面的命令??cd D:\06-我的開發(fā)之路\DotNet體系\04-DotNet專題篇\01-Quartz.Net定時(shí)調(diào)度\01-Code\MyQuarzt\QuartzDemo\bin\Debug??)

   ②:QuartzDemo.exe help: 查看指令

     QuartzDemo.exe install: 安裝服務(wù)

     QuartzDemo.exe install start : 安裝服務(wù)且開啟

     QuartzDemo.exe uninstall :卸載服務(wù)

  截止此處,大功告成,可以看到D盤中多了一個(gè)txt文件,每隔3s多一條數(shù)據(jù)

?下面分享整個(gè)過(guò)程的代碼部署的相應(yīng)截圖:

?(1). Quartz代碼和TopSelf調(diào)用代碼:

1 public class QuartzService2 {3 IScheduler scheduler = null;4 /// <summary>5 /// 定時(shí)調(diào)度業(yè)務(wù)6 /// </summary>7 public QuartzService()8 {9 //1.創(chuàng)建作業(yè)調(diào)度池(Scheduler) 10 scheduler = StdSchedulerFactory.GetDefaultScheduler(); 11 12 //2.創(chuàng)建一個(gè)具體的作業(yè)即job (具體的job需要單獨(dú)在一個(gè)文件中執(zhí)行) 13 var job = JobBuilder.Create<HelloJob5>().Build(); 14 15 //3.創(chuàng)建并配置一個(gè)觸發(fā)器即trigger 3s執(zhí)行一次 16 var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(3) 17 .RepeatForever()).Build(); 18 //4.將job和trigger加入到作業(yè)調(diào)度池中 19 scheduler.ScheduleJob(job, trigger); 20 } 21 /// <summary> 22 /// 開啟任務(wù) 23 /// </summary> 24 public void Start() 25 { 26 scheduler.Start(); 27 } 28 /// <summary> 29 /// 關(guān)閉任務(wù) 30 /// </summary> 31 public void Stop() 32 { 33 //true:表示該Sheduler關(guān)閉之前需要等現(xiàn)在所有正在運(yùn)行的工作完成才能關(guān)閉 34 //false:表示直接關(guān)閉 35 scheduler.Shutdown(true); 36 } 37 /// <summary> 38 /// 暫停調(diào)度 39 /// </summary> 40 public void Pause() 41 { 42 scheduler.PauseAll(); 43 } 44 /// <summary> 45 /// 繼續(xù)調(diào)度 46 /// </summary> 47 public void Continue() 48 { 49 scheduler.ResumeAll(); 50 } 51 52 }

1           HostFactory.Run(x => //12 {3 x.Service<QuartzService>(s => //24 {5 s.ConstructUsing(name => new QuartzService()); //36 //開啟和關(guān)閉 必選項(xiàng)7 s.WhenStarted(tc => tc.Start()); //48 s.WhenStopped(tc => tc.Stop()); //59 10 // optional pause/continue methods if used 11 // 暫停和繼續(xù) 選填 12 s.WhenPaused(tc => tc.Pause()); 13 s.WhenContinued(tc => tc.Continue()); 14 15 optional, when shutdown is supported 16 //s.WhenShutdown(tc => tc.Shutdown()); 17 18 }); 19 x.RunAsLocalSystem(); //6 20 x.SetDescription("測(cè)試借助TopSelf將Quartz發(fā)布成服務(wù)"); //7 21 x.SetDisplayName("QuartzService"); //8 22 x.SetServiceName("QuartzService2"); //9 23 });

(2). 定位到指定路徑,并進(jìn)行相應(yīng)的服務(wù)部署

a. 很多指令

b. 安裝服務(wù)并開啟

?

查看服務(wù)列表:

?

查看服務(wù)運(yùn)行結(jié)果:

?

刪除服務(wù):

?

?

三. 借助window服務(wù)類

?  這里不詳細(xì)介紹(網(wǎng)上一堆一堆的),推薦采用上面的TopShelf的服務(wù)發(fā)布方式。

?

總結(jié)

以上是生活随笔為你收集整理的第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。