Topshelf + Quartz2.5 创建基于windows服务

1.创建一个定时调度Quartz类

 1 using Quartz;
 2 using Quartz.Impl;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 using Topshelf;
 9
10
11 namespace TopShelfSolution
12 {
13
14     public sealed class QuartzServiceRunner :ServiceControl,ServiceSuspend
15     {
16         private readonly IScheduler scheduler;
17
18        public QuartzServiceRunner()
19        {
20            scheduler = StdSchedulerFactory.GetDefaultScheduler();
21        }
22
23        public bool Start(HostControl hostControl)
24        {
25            scheduler.Start();
26            return true;
27        }
28
29        public bool Stop(HostControl hostControl)
30        {
31            scheduler.Shutdown(false);
32            return true;
33        }
34
35        public bool Continue(HostControl hostControl)
36        {
37            scheduler.ResumeAll();
38            return true;
39        }
40
41        public bool Pause(HostControl hostControl)
42        {
43            scheduler.PauseAll();
44            return true;
45        }
46
47     }
48 }

2.创建用于处理业务逻辑的类

 1 using Quartz;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7
 8
 9
10 namespace TopShelfSolution.QuartzJobs
11 {
12     public sealed class QuartzJobForTest :IJob
13     {
14         public void Execute(IJobExecutionContext context)
15         {
16            //处理业务逻辑
17             Console.WriteLine(DateTime.Now.ToString("yyyyMMddhhmmssfff"));
18
19         }
20     }
21 }

3.创建quartz.config配置文件

# You can configure your scheduler in either <quartz> configuration section
# or in quartz properties file
# Configuration section has precedence  

quartz.scheduler.instanceName = ServerScheduler  

# configure thread pool info
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
quartz.threadPool.threadCount = 10
quartz.threadPool.threadPriority = Normal  

# job initialization plugin handles our xml reading, without it defaults are used
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml 

# export this server to remoting context
quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
quartz.scheduler.exporter.port = 555
quartz.scheduler.exporter.bindName = QuartzScheduler
quartz.scheduler.exporter.channelType = tcp
quartz.scheduler.exporter.channelName = httpQuartz

4.创建定时job的配置信息xml文件

<?xml version="1.0" encoding="UTF-8"?>

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
  <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
  </processing-directives>
<schedule>

  <job>
    <name>QuartzJobForTestJob</name>
    <group>TestJobGroup</group>
    <description>Test_Sample job for Quartz</description>
    <job-type>TopShelfSolution.QuartzJobs.QuartzJobForTest, TopShelfSolution</job-type>
    <durable>true</durable>
    <recover>false</recover>
  </job>

  <trigger>
    <cron>
      <name>QuartzJobForTestJobTrigger</name>
      <group>TestJobTriggerGroup</group>
      <job-name>QuartzJobForTestJob</job-name>
      <job-group>TestJobGroup</job-group>
       <!--从start-time起,从0秒开始,每1/5秒执行一次IJob.Execute-->
      <start-time>2018-01-22T00:00:00+08:00</start-time>
      <cron-expression>0/2 * * * * ?</cron-expression>
    </cron>
  </trigger>

</schedule>

</job-scheduling-data>

5.主函数入口

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading;
 6 using System.Threading.Tasks;
 7 using System.Timers;
 8 using Topshelf;
 9
10 namespace TopShelfSolution
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             HostFactory.Run(u =>
17             {
18                 u.Service<QuartzServiceRunner>();
19                 u.RunAsLocalSystem();
20
21                 u.SetDescription("Sample Topshelf Host服务的描述");
22                 u.SetDisplayName("Stuff显示名称");
23                 u.SetServiceName("Stuff服务名称");
24
25                 //new Ttask().Start();
26             });
27         }
28     }
29 }

注:每次修改完quartz_jobs.xml文件后, 需重新生成项目,将quartz_jobs.xml 复制到当前项目bin\Release目录下。

原文地址:https://www.cnblogs.com/-xyl/p/9319072.html

时间: 2024-10-01 06:21:49

Topshelf + Quartz2.5 创建基于windows服务的相关文章

使用Topshelf组件构建简单的Windows服务

很多时候都在讨论是否需要了解一个组件或者一个语言的底层原理这个问题,其实我个人觉得,对于这个问题,每个人都有自己的看法,个人情况不同,选择的方式也就会不同了.我个人觉得无论学习什么,都应该尝试着去了解对应的原理和源码(这里就不要急着吐槽,容我说完).对底层的了解不是为了让你写出类似的东西,让你写也不可能写的出来,重写一个就需要以此修改整个底层结构,了解底层知识只是为了让你可以在写业务代码时,选择合适的方式,以此使底层与业务层配合达到效率最佳.任何一种方式有坏有好,需要合适的选择. 如果觉得楼主以

为MongoDB创建一个Windows服务

一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件安装到了(E:\MongoDB) 安装好之后该文件夹下就出现下面的文件, 这个时候新建一个Data文件夹用来存放MongoDB的所有数据,新建一个Log文件夹用来存放日志文件 三:启动MongoDB数据库,在命令行窗口执行下面的命令,执行完成之后会看到下面的提示信息 e:\mongodb\bin\m

TopShelf+Quartz.net实现基于window服务的定时调度

由于发布网站上Quartz.net的定时调度会被IIS回收不执行,解决的方法写Windows服务-案列[每天早晨8点删除过期35天的域名] 整了个三成架构:从Nuget成程序管理包下载Quart类库和TopShelf类库 1.创建定时调度Quartz类 1 class QuartzServiceRunner 2 { 3 private readonly IScheduler scheduler; 4 5 public QuartzServiceRunner() 6 { 7 scheduler =

初始MongoDB------将MongoDB创建为Windows服务

上一遍我写的是关于基本的MongoDB的安装,可能不是很详细,也写得很不好,不过这次我们会详细的说说,如果将MongoDB部署在你的Windows电脑上. 1.配置环境变量 如果每次都要在CMD进入MongoDB上的bin目录来操作,那就真的很麻烦了,那么我们就直接在环境变量上添加好了. 首先右击我的电脑点击属性,找到高级系统设置,然后进入 然后就看到环境变量了 然后点击进入,找到Path这一列 Path路径上存放的都是各个应用程序的bin路径,只要在这里配置好了,就能在CMD上使用bin目录上

C#使用定时任务框架Windows.TaskSchedule.exe安装控制台应用程序创建的Windows服务

上一篇介绍了利用模板创建.安装以及卸载Windows服务,本篇继续研究这个话题,不过是创建控制台程序,使用Windows.TaskSchedule.exe安装. 为什么要使用控制台程序?--调试简单粗暴.哈哈. 创建控制台应用程序项目后,我们编辑服务主体代码,我们继续向文本文件中写入一句话. 在实现具体逻辑前,我们需要引用Windows.TaskSchedule.Extends.dll,服务类继承 IJob . 1 using System; 2 using System.Configurati

基于Windows服务的WCF

(1)创建WCF 代码示例: [ServiceContract] public interface ILimsDBService { [OperationContract] int ExecuteSql(string strSql); [OperationContract] DataTable GetDataTable(string strSql); [OperationContract] DataSet GetDataSet(string strSql); } public class Lim

[翻译] 使用 .NET Core 3.0 创建一个 Windows 服务

原文: .NET Core Workers as Windows Services 在 .NET Core 3.0 中,我们引入了一种名为 Worker Service 的新型应用程序模板.此模板旨在为您在 .NET Core 中编写长时间运行的服务的提供一个起点.在本演练中,我们将创建一个 worker 并将其作为 Windows 服务运行. 创建一个 Worker 注意:在我们的预览版中,worker 模板与 Web 模板位于同一级菜单中.这将在未来的版本中发生变化.我们打算将 Worker

使用.NET Core创建Windows服务(二) - 使用Topshelf方式

原文:Creating Windows Services In .NET Core – Part 2 – The "Topshelf" Way 作者:Dotnet Core Tutorials 译者:Lamond Lu 译文:使用.NET Core创建Windows服务(二) - 使用Topshelf方式 使用.NET Core创建Windows服务 使用微软推荐方式 使用Topshelf方式 在前一篇文章中,我给大家介绍了,如何基于微软推荐方式使用.NET Core创建Windows

ASP.NET Core使用TopShelf部署Windows服务

asp.net core很大的方便了跨平台的开发者,linux的开发者可以使用apache和nginx来做反向代理,windows上可以用IIS进行反向代理. 反向代理可以提供很多特性,固然很好.但是还有复杂性,我们也可以使用windows service来直接启动kestrel. asp.net core官方网站提供了一种基于windows服务部署的方法:在 Windows 服务中托管 ASP.NET Core 这种方式需要修改代码,然后部署的时候,使用命令行创建.安装服务,然后再启动. 感觉