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:\Service\bin\Release\ConsoleApp3.exe install

rem 啟動服務
E:\Service\bin\Release\ConsoleApp3.exe start

@echo on

pause

卸載服務

@echo off

rem 卸載Windows服務
E:\Service\bin\Release\ConsoleApp3.exe
uninstall @echo on pause

未完待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM