飞凌通信息科技

企业信息化专家

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

基于开源框架Quartz.net打造,废话不多说,上代码

第一步:搭建服务器端

1.新建控制台项目,使用代码完成配置(如果你想方便修改,可以使用quartz的xml配置,都是支持的)

NuGet搜索quartz,topshelf和log4net安装下

public static NameValueCollection GetConfig()
        {
            NameValueCollection kvp = new NameValueCollection();
            //存储类型
            kvp["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
            //表明前缀
            kvp["quartz.jobStore.tablePrefix"] = "QRTZ_";
            //驱动类型
            kvp["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
            //数据源名称
            kvp["quartz.jobStore.dataSource"] = "myDS";
            //连接字符串
            kvp["quartz.dataSource.myDS.connectionString"] = @"Data Source=xxx.xxx.xxx.xxx;Initial Catalog=dbName;User ID=xx;Password=xx";
            //sqlserver版本
            kvp["quartz.dataSource.myDS.provider"] = "SqlServer-20";
            //cluster集群配置
            //kvp["quartz.jobStore.clustered"] = "true";
            //kvp["quartz.scheduler.instanceId"] = "AUTO";
            //kvp["quartz.scheduler.proxy"] = "true";
            //kvp["quartz.scheduler.proxy.address"] = "tcp://127.0.0.1:555/QuartzScheduler";
            kvp["quartz.scheduler.instanceName"] = "RemotesServer";
            kvp["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
            kvp["quartz.threadPool.threadCount"] = "5";
            kvp["quartz.threadPool.threadPriority"] = "Normal";
            kvp["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
            kvp["quartz.scheduler.exporter.port"] = "555";
            kvp["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";
            kvp["quartz.scheduler.exporter.channelType"] = "tcp";
            kvp["quartz.scheduler.exporter.channelName"] = "httpQuartz";
            kvp["quartz.scheduler.exporter.rejectRemoteRequests"] = "false";
            return kvp;
        }
View Code

第二步:集成topshelf

主要是为了安装成windows服务

public class SrvRunner:ServiceControl, ServiceSuspend
    {
        private readonly IScheduler scheduler;

        public SrvRunner()
        {
            var properties = QzConfigs.GetConfig();
            var schedulerFactory = new StdSchedulerFactory(properties);
            scheduler = schedulerFactory.GetScheduler();
        }

        public bool Start(HostControl hostControl)
        {
            scheduler.Start();
            return true;
        }

        public bool Stop(HostControl hostControl)
        {
            scheduler.Shutdown(false);
            return true;
        }

        public bool Continue(HostControl hostControl)
        {
            scheduler.ResumeAll();
            return true;
        }

        public bool Pause(HostControl hostControl)
        {
            scheduler.PauseAll();
            return true;
        }
    }
View Code

第三步:业务代码(job)开发

[Description("TestJob示例")]
    public class TestJob: IJob
    {
        private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob));

        public void Execute(IJobExecutionContext context)
        {
            _logger.InfoFormat("TestJob测试");
        }
    }
View Code

第四步:配置log4net来输出log(appender 配置如下)

<!-- 控制台前台显示日志 -->
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
      <mapping>
        <level value="Info" />
        <foreColor value="Green" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
      </layout>

      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Fatal" />
      </filter>
    </appender>

 

直接启动即可已控制套方式运行服务器,手工build一个任务实例进去,效果如下

如果想安装成windows服务,也是可以的,直接install就行

 至此,服务器端已经搭建完成了

posted on 2017-07-25 11:01  Eric.Wu  阅读(212)  评论(0编辑  收藏  举报
易用软件 | 专注中小企业信息化