• C# QuartZ使用实例写成服务


    官方学习文档:http://www.quartz-scheduler.net/documentation/index.html

    官方的源代码下载:http://sourceforge.net/projects/quartznet/files/quartznet/ 

    nuget安装包地址:  https://www.nuget.org/packages/Quartz/

    不会写cron可以自动生成   http://cron.qqe2.com/

    在程序包管理器控制台  输入Install-Package Quartz -Version 3.0.6

    倒包

    下面是调度的实例部分

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Quartz;
    using Quartz.Impl;
    
    namespace ConsoleApp3
    {
       public class Scheduler
        {
            private static IScheduler scheduler;
            public static  IScheduler Current
            {
                get 
                {
                    if (scheduler==null)
                    {
                        scheduler = StdSchedulerFactory.GetDefaultScheduler().Result;
                    }
                    return scheduler;
                }
            }
    
            /// <summary>
            /// 启动程序
            /// </summary>
            public  void Start()
            {
                Current.Start();
                task();
            }
    
            /// <summary>
            /// 停止程序
            /// </summary>
            public void Stop()
            {
                Current.Shutdown();
            }
    
            /// <summary>
            /// 重启程序
            /// </summary>
            public void Restart()
            {
                Current.Shutdown();
                scheduler = null;
                Current.Start();
            }
    
            /// <summary>
            /// 任务
            /// </summary>
            public void task()
            {
                Job<ORders>("order", "0/1 * * * * ? ");//corn规则
            }
    
            /// <summary>
            /// 初始化任务
            /// </summary>
            public void Job<T>(string uid, string cronExpression)where T : IJob
            {
               //初始化创建作业
                var jobuilder = JobBuilder.Create<T>();//约束类型为 Ijob
                //根据ID 标识触发器 构建调度
                 var job=   jobuilder.WithIdentity(uid, uid).Build();
    
                var cron = (ICronTrigger)TriggerBuilder.Create() //初始化触发器
                                                .WithIdentity("trigger" + uid, "group" + uid)//标识触发器
                                                .StartNow()//触发第一次运行
                                                .WithCronSchedule(cronExpression)//触发规则
                                                .Build();//构建调度
                //将创建的类线程和规则关联
                Current.ScheduleJob(job, cron);
            }
        }
    }

    要每秒执行的调度方法  Execute 去实现

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Quartz;
    
    namespace ConsoleApp3
    {
        public class ORders : IJob
        {
            public Task Execute(IJobExecutionContext context)
            {
                Task task = null;
                Console.WriteLine("wewr");
                return task;
            }
    
    
        }
    }

    接着使用Topshelf 创建Windows 服务

    官网  http://topshelf-project.com/  

    git  http://github.com/topshelf/Topshelf/downloads

    在 nuget 搜索 Topshelf 包

    在包管理工具中安装  输入Install-Package Topshelf -Version 4.0.4.161-develop 

    也可以 加日志   Install-Package Topshelf.Log4Net

    官网给的例子 http://docs.topshelf-project.com/en/latest/configuration/quickstart.html

    通过下面的实例安装服务

    using System;
    using Topshelf;
    
    namespace ConsoleApp3
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    HostFactory.Run(x =>
                    {
                        x.Service<give>(s =>
                        {
                            s.ConstructUsing(name => new give());
                            s.WhenStarted(tc => tc.Start());
                            s.WhenStopped(tc => tc.Stop());
    
                        });
                        x.RunAsLocalSystem();
                        x.SetDescription("测试服务");//服务描述
                        x.SetDisplayName("Test.y");//显示服务名
                        x.SetServiceName("Test.y");//服务名称
                    });
                }
                catch (Exception ex)
                {
                    Console.WriteLine(string.Format("服务启动失败,原因:{0}", ex.ToString()));
                }
    
                new Scheduler().Start();
                Console.ReadKey();
            }
        }
        
        /// <summary>
        /// 服务要跑的内容
        /// </summary>
        class give
        {
            public void Start()
            {
                try
                {
                   new Scheduler().Start();//调度启动方法
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
                Console.WriteLine("执行Start方法,启动成功");
            }
            public void Stop()
            {
            }
        }
    }

    下面我们制作安装服务bat 文件

    @echo off
    
    rem 安装Windows服务
    E:ServiceinReleaseConsoleApp3.exe install
    
    rem 启动服务
    E:ServiceinReleaseConsoleApp3.exe start
    
    @echo on
    
    pause

    卸载服务

    @echo off
    
    rem 卸载Windows服务
    E:ServiceinReleaseConsoleApp3.exe
    uninstall @echo on pause

    未完待续。。。

  • 相关阅读:
    UVA 10131题解
    算法常见概念
    图算法概论
    POJ 1654 area 解题
    大数阶乘的位数和精确值计算
    printf()与 scanf()
    想编程之美竞赛
    所感所想
    Git 入门和常用命令详解
    使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题)
  • 原文地址:https://www.cnblogs.com/feizianquan/p/9495128.html
Copyright © 2020-2023  润新知