Quart.NET實施參考

參考

1.博客園: http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.htmlhtml

2.官網:http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.htmlgit

本文主要是記錄實施的過程及要點,具體的內容請參考上面的兩個地址,寫的很是細緻。github

Job

實現IJob接口,實現void Execute(IJobExecutionContext context)便可,這裏可能須要注意的應該是日誌。Quart.NET集成了Common.Logging,我在運用時,使用了它的Log4Net擴展。web

附加下NuGet安裝命令:

install-package Quartzexpress

install-package Common.Logging.Log4Net1211windows

這裏稍微有點坑,Common.Logging.Log4Net有多個版本,每一個版本對應的log4net版本是不一致的,而且在App.config(Web.config)中有強制版本的聲明,若運行報錯必定是沒有配置好。我採用Log4Net1211配置以下app

 1 <configuration>
 2   <configSections>   
 3     <sectionGroup name="common">
 4       <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
 5     </sectionGroup>
 6   </configSections>
 7 
 8   <common>
 9     <logging>
10       <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1211"><!--注意此處的名稱要和引用的Nuget包一致,第一次我這邊不是1211一直報錯,google無數還沒解決方案-->
11     ...
12       </factoryAdapter>
13     </logging>
14   </common>
15 
16   <runtime>
17     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">      
18       <dependentAssembly>
19         <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
20         <bindingRedirect oldVersion="0.0.0.0-1.2.11.0" newVersion="1.2.11.0" />
21       </dependentAssembly><!--此處版本也須要一致-->
22     </assemblyBinding>
23   </runtime>
24 </configuration>
View Code

Trigger配置

詳見Demo CapQueen.Scheduler.HelloJob 關鍵點的是配置Job的Tragger。 全部的Job配置在CapQueen.Scheduler.Service/quartz_jobs.xml中,下面的配置說明摘自參考1框架

<schedule>
     <!--2.0版本中的job至關於1.x版本中的<job-detail>,這個節點是用來定義每一個具體的任務的,多個任務請建立多個job節點便可-->
     <job>
       <!--任務名稱,同一個group中多個job的name不能相同,若未設置group則全部未設置group的job爲同一個分組(必須設置)-->
       <name>sampleJob</name>
       <!--任務所屬分組,用於標識任務所屬分組-->
       <group>sampleGroup</group>
       <!--工做任務的描述,用於描述任務具體內容-->
      <description>Sample job for Quartz Server</description>
       <!--任務類型,任務的具體類型及所屬程序集,格式:實現了IJob接口的包含完整命名空間的類名,程序集名稱-->
       <job-type>Quartz.Server.SampleJob, Quartz.Server</job-type>
       <!--<durable>(持久性)-若是一個Job是不持久的, 一旦沒有觸發器與之關聯,它就會被從scheduler 中自動刪除-->
      <durable>true</durable>
      <recover>false</recover>     
    </job>
     <!--trigger 任務觸發器,用於定義使用何種方式觸發任務(job),同一個job能夠定義多個trigger ,多個trigger 各自獨立的執行調度,每一個trigger 中必須且只能定義一種觸發器類型(calendar-interval、simple、cron)
     calendar-interval 一種觸發器類型,使用較少,此處略過-->
     <trigger>
       <!--簡單任務的觸發器,能夠調度用於重複執行的任務-->
       <simple>
         <!--觸發器名稱,同一個分組中的名稱必須不一樣-->
         <name>sampleSimpleTrigger</name>
         <!--觸發器組-->
         <group>sampleSimpleGroup</group>
         <!--觸發器描述-->
         <description>Simple trigger to simply fire sample job</description>
         <!--要調度的任務名稱,該job-name必須和對應job節點中的name徹底相同-->
         <job-name>sampleJob</job-name>
         <!--調度任務(job)所屬分組,該值必須和job中的group徹底相同-->
         <job-group>sampleGroup</job-group>
         <!--start-time(選填) 任務開始執行時間utc時間,北京時間須要+08:00,如:<start-time>2012-04-01T08:00:00+08:00</start-time>表示北京時間2012年4月1日上午8:00開始執行,注意服務啓動或重啓時都會檢測此屬性,若沒有設置此屬性或者start-time設置的時間比當前時間較早,則服務啓動後會當即執行一次調度,若設置的時間比當前時間晚,服務會等到設置時間相同後纔會第一次執行任務,通常若無特殊須要請不要設置此屬性-->
         <misfire-instruction>SmartPolicy</misfire-instruction>
         <!--任務執行次數,如:<repeat-count>-1</repeat-count>表示無限次執行-->
         <repeat-count>-1</repeat-count>
         <!--任務觸發間隔(毫秒)-->
         <repeat-interval>10000</repeat-interval>
        </simple>    
    </trigger>   
     <trigger>
       <!--cron複雜任務觸發器使用cron表達式定製任務調度-->
       <cron>
          <name>sampleSimpleTrigger2</name>
          <group>sampleSimpleTrigger2</group>
          <job-name>sampleJob2</job-name>
          <job-group>sampleGroup2</job-group>
         <!--start-time(選填) 任務開始執行時間utc時間,北京時間須要+08:00,如:<start-time>2012-04-01T08:00:00+08:00</start-time>表示北京時間2012年4月1日上午8:00開始執行,注意服務啓動或重啓時都會檢測此屬性,若沒有設置此屬性,服務會根據cron-expression的設置執行任務調度;若start-time設置的時間比當前時間較早,則服務啓動後會忽略掉cron-expression設置,當即執行一次調度,以後再根據cron-expression執行任務調度;若設置的時間比當前時間晚,則服務會在到達設置時間相同後纔會應用cron-expression,根據規則執行任務調度,通常若無特殊須要請不要設置此屬性-->
         <!--cron表達式-->
         <cron-expression>0/10 * * * * ?</cron-expression>
        </cron>  
    </trigger>
View Code

 

其中trigger的觸發時間配置,推薦採用cron-expression,這是源自Linux的配置,十分強大,建議學習。詳細參考:懶惰的肥兔的總結tcp

Host

Quart.NET的Host很方便,支持web/console/windows service。 官方的示例中採用了Topshelf框架進行Windows Service/Console方式的部署。詳細查看官方示例Demo。也能夠查看個人Demo。ide

關於TopShelf很是值得提一提,相見恨晚啊,這麼好的框架,我卻沒有早點發現。

TopShelf 擴展了console/Windows Service,使console直接具有exe host和service host兩種能力。

exe Host: CMD中直接運行exe

Service Host: xxx.exe /install[uninstall]

今後調試Windows Service告別了附加調試,直接F5便可調試。

Quart 的Web Host:demo 中沒有實現,只要在global中appstart/end事件中啓動scheduler.Start()/scheduler.Shutdown(true);

 

管理工具

關於Quart的管理工具仍是挺多的,我選擇了社區比較活躍的CrystalQuartz

安裝十分簡單,在任何的Web工程中直接NuGet: CrystalQuartz.Remote

它是基於Quartz公開的TCP API進行調度管理的,所以必定要給Quartz配置好remote服務。配置很簡單,具體參見Demo app.config quartz / remoting expoter 的配置

安裝完成以後,默認會配置好Web.config,而且默認的 Quartz tcp端口是555,訪問:localhost:/CrystalQuartzPanel.axd便可查看管理控制檯

Mark到此結束,Demo請看:GitHub, 但願本文略微有點參考價值。

相關文章
相關標籤/搜索