zoukankan      html  css  js  c++  java
  • Quart.NET实施参考

    参考

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

    2.官网:http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html

    本文主要是记录实施的过程及要点,具体的内容请参考上面的两个地址,写的非常细致。

    Job

    实现IJob接口,实现void Execute(IJobExecutionContext context)即可,这里可能需要注意的应该是日志。Quart.NET集成了Common.Logging,我在运用时,使用了它的Log4Net扩展。

    附加下NuGet安装命令:

    install-package Quartz

    install-package Common.Logging.Log4Net1211

    这里稍微有点坑,Common.Logging.Log4Net有多个版本,每个版本对应的log4net版本是不一致的,并且在App.config(Web.config)中有强制版本的声明,若运行报错一定是没有配置好。我采用Log4Net1211配置如下

     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的配置,十分强大,建议学习。详细参考:懒惰的肥兔的总结

    Host

    Quart.NET的Host很方便,支持web/console/windows service。 官方的示例中采用了Topshelf框架进行Windows Service/Console方式的部署。详细查看官方示例Demo。也可以查看我的Demo。

    关于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, 希望本文略微有点参考价值。

  • 相关阅读:
    二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
    思维题 HDOJ 5288 OO’s Sequence
    树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland
    最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
    最大流增广路(KM算法) HDOJ 1533 Going Home
    最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
    Complete the Word CodeForces
    Gadgets for dollars and pounds CodeForces
    Vasya and Basketball CodeForces
    Carries SCU
  • 原文地址:https://www.cnblogs.com/capqueen/p/4386738.html
Copyright © 2011-2022 走看看