一. IIS部署

  比如在MVC框架中集成了Quartz.Net定时调度,此时该调度系统会随着MVC框架被挂在IIS下,IIS会进程回收,所以大部分开发都会遇到Quartz挂在IIS下一段时间不好用。

  补充:IIS可以设置定时自动回收,默认回收是1740分钟,也就是29小时。IIS自动回收相当于服务器IIS重启,应用程序池内存清空,所有数据被清除,相当于IIS重启,在度量快速开发平台服务器端,为了减小数据库负担,内存中暂存了很多信息,不适合频繁的回收,因为回收会造成服务器端所有存在内存中的数据丢失,如果没有及时保存到数据库中,可能导致程序出现问题。而如果系统使用高峰时期,并不适合回收,回收可能导致几十秒IIS无响应,对于正在工作的人员来说,是一种很不好的体验,会以为是网络或者掉线等问题。

  解决方案:关闭该项目在IIS上对应的进程池的回收机制。

  如何关闭进程池的回收机制:选中IIS中部署的项目对应的进程池,点击【高级设置】,里面有5个核心参数:

    ① 发生配置更改时禁止回收:如果为True,应用程序池在发生配置更改时将不会回收。

    ② 固定时间间隔(分钟):超过设置的时间后,应用程序池回收,设置为:0 意味着应用程序池不回收。系统默认设置的时间是1740(29小时)。

    ③ 禁用重叠回收:如果为true,将发生应用程序池回收,以便在创建另一个工作进程之前退出现有工作进程

    ④ 请求限制:应用程序池在回收之前可以处理的最大请求数。如果值为0,则表示应用程序池可以处理的请求数没有限制。

    ⑤ 生成回收事件日志条目:每发生一次指定的回收事件时便产生一个事件日志条目。

   总结:即使可以将IIS进程池回收关掉,仍然不建议把Quartz挂到IIS下,长时间不回收,会存在内存溢出的问题。

二. C/S程序直接运行

  我们可以用控制台的形式或者Winform的形式单独做一套定时调度系统,与主框架分类,也便于维护,可以直接将exe程序或者Winform窗体程序在服务器上运行。

  总结:该方法不存在回收的问题,但直接在服务器上运行,容易不小心被运维人员关掉了。

  对于专业一点的人员来说,该方案,直接运行程序太Low了,所以通常是将exe程序发不成windows服务,通过服务的开启和关闭来 维护。

三. 借助topshelf来进行的windows服务部署

  官网:http://topshelf-project.com/ , 这是一种通用的发布服务的方式,步骤如下:

  1. 通过NuGet下载 Topshelf 的程序集

  2. 配置QuartzService类,充当定时任务的服务端程序

    ①:构造函数中执行定时调度任务

    ②:Start()方法控制调度的开启 (必填)

    ③:Stop()方法控制调度的关闭 (必填)

    ④:Pause()方法暂停调度 (选填)

    ⑤:Continue()方法继续调度 (选填)

    ⑥:Shutdown() 关闭 (需要支持)

  3. 在主程序中通过topshelf代码调用: HostFactory.Run 详见主程序。(在里面可以设置服务的名称、描述等

  4. 通过指令进行服务发布和卸载(查看windows服务:services.msc)

   ①:通过cmd命令定位到bin文件目录下(以管理员身份运行)

    (eg: 先输入 d: 切换到D盘,再执行下面的命令  cd D:\06-我的开发之路\DotNet体系\04-DotNet专题篇\01-Quartz.Net定时调度\01-Code\MyQuarzt\QuartzDemo\bin\Debug  )

   ②:QuartzDemo.exe help: 查看指令

     QuartzDemo.exe install: 安装服务

     QuartzDemo.exe install start : 安装服务且开启

     QuartzDemo.exe uninstall :卸载服务

  截止此处,大功告成,可以看到D盘中多了一个txt文件,每隔3s多一条数据

下面分享整个过程的代码部署的相应截图:

 (1). Quartz代码和TopSelf调用代码:

    public class QuartzService
{
IScheduler scheduler = null;
/// <summary>
/// 定时调度业务
/// </summary>
public QuartzService()
{
//1.创建作业调度池(Scheduler)
scheduler = StdSchedulerFactory.GetDefaultScheduler(); //2.创建一个具体的作业即job (具体的job需要单独在一个文件中执行)
var job = JobBuilder.Create<HelloJob5>().Build(); //3.创建并配置一个触发器即trigger 3s执行一次
var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds()
.RepeatForever()).Build();
//4.将job和trigger加入到作业调度池中
scheduler.ScheduleJob(job, trigger);
}
/// <summary>
/// 开启任务
/// </summary>
public void Start()
{
scheduler.Start();
}
/// <summary>
/// 关闭任务
/// </summary>
public void Stop()
{
//true:表示该Sheduler关闭之前需要等现在所有正在运行的工作完成才能关闭
//false:表示直接关闭
scheduler.Shutdown(true);
}
/// <summary>
/// 暂停调度
/// </summary>
public void Pause()
{
scheduler.PauseAll();
}
/// <summary>
/// 继续调度
/// </summary>
public void Continue()
{
scheduler.ResumeAll();
} }
             HostFactory.Run(x =>                                 //
{
x.Service<QuartzService>(s => //
{
s.ConstructUsing(name => new QuartzService()); //3
//开启和关闭 必选项
s.WhenStarted(tc => tc.Start()); //
s.WhenStopped(tc => tc.Stop()); //5 // optional pause/continue methods if used
// 暂停和继续 选填
s.WhenPaused(tc => tc.Pause());
s.WhenContinued(tc => tc.Continue()); //// optional, when shutdown is supported
//s.WhenShutdown(tc => tc.Shutdown()); });
x.RunAsLocalSystem(); //
x.SetDescription("测试借助TopSelf将Quartz发布成服务"); //
x.SetDisplayName("QuartzService"); //
x.SetServiceName("QuartzService2"); //
});

(2). 定位到指定路径,并进行相应的服务部署

a. 很多指令

b. 安装服务并开启

查看服务列表:

查看服务运行结果:

删除服务:

三. 借助window服务类

  这里不详细介绍(网上一堆一堆的),推荐采用上面的TopShelf的服务发布方式。

第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】)的更多相关文章

  1. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  2. WCF服务部署到IIS上,然后通过web服务引用方式出现错误的解决办法

    本文转载:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html 昨天在用IIS部署一个WCF服务时,碰到了如下错误: 理解了文档内 ...

  3. Vue路由器的hash和history两种工作模式 && Vue项目编译部署

    1 # 一.Vue路由器的两种工作模式 2 # 1.对于一个uri来说,什么是hash值? 井号及其后面的内容就是hash值. 3 # 2.hash值不会包括含在HTTP请求中,即:hash值不会带给 ...

  4. 第4章 部署模式 Deployment Plan(部署规划)

    已开发了基于组件的应用程序,该应用程序在逻辑上构造为多层结构,如 Three-Layered Services Application. 中所述.您希望将它分布到一组在物理上为多级结构的服务器上,如 ...

  5. IIS在ASP.NET Core下的两种部署模式

    KestrelServer最大的优势体现在它的跨平台的能力,如果ASP.NET CORE应用只需要部署在Windows环境下,IIS也是不错的选择.ASP.NET CORE应用针对IIS具有两种部署模 ...

  6. WCF学习之旅—WCF服务部署到IIS7.5(九)

    上接   WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...

  7. WCF服务部署到IIS7.5

    下面介绍如何把WCF服务部署到IIS: 为WCF服务创建.svc文件 我们知道,每一个ASP.NET Web服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对相应Web服务的调用.与 ...

  8. PHP5 的五种常用模式

    PHP5 的五种常用模式. 工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系 ...

  9. Nacos系列:Nacos的三种部署模式

    三种部署模式 Nacos支持三种部署模式 1.单机模式:可用于测试和单机使用,生产环境切忌使用单机模式(满足不了高可用) 2.集群模式:可用于生产环境,确保高可用 3.多集群模式:可用于多数据中心场景 ...

随机推荐

  1. Saltstack_使用指南02_远程执行-验证

    1. 主机规划 2. Master与哪些minion通信 2.1. Master与哪些minion正常通信 [root@salt100 ~]# salt '*' test.ping salt100: ...

  2. LeetCode算法题-Binary Tree Tilt(Java实现)

    这是悦乐书的第263次更新,第276篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第130题(顺位题号是563).给定二叉树,返回整棵树的倾斜度.树节点的倾斜被定义为所有 ...

  3. css_属性

    老师的博客:https://www.cnblogs.com/liwenzhou/p/7999532.htm css的属性 整体属性的:作用于全局 width:表示宽 height:表示长 color: ...

  4. javaScript判断手机型号

    window.onload = function () { alert("1"); var u = navigator.userAgent; if (u.indexOf('Andr ...

  5. 第一本Docker书读书笔记

    日常使用命令 1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: ...

  6. Google Chrome等浏览器不允许关闭点击跟踪??

    hrome.Safari.Opera 和 Microsoft Edge 的新版本将不再允许用户关闭“链接审计( hyperlink auditing)”的功能.链接审计是一项 HTML 标准,被用于跟 ...

  7. 使用BigQuery分析GitHub上的C#代码

    一年多以前,Google 在GitHub中提供了BigQuery用于查询的GitHub上的开源代码(open source code on GitHub available for querying) ...

  8. 基于 HTML5 的 WebGL 楼宇自控 3D 可视化监控

    前言 智慧楼宇和人们的生活息息相关,楼宇智能化程度的提高,会极大程度的改善人们的生活品质,在当前工业互联网大背景下受到很大关注.目前智慧楼宇可视化监控的主要优点包括: 智慧化 -- 智慧楼宇是一个生态 ...

  9. windows下安装和使用scrapy

    首先,要确保已经正确安装了python环境,并安装了pip包 接着,打开cmd或者powershell ,输入命令 pip install scrapy .安装完之后 运行scrapy性能测试命令: ...

  10. springboot 出现 Connection refused: connect

    总结网上的方法再结合我自己的方法 1. springCloud com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectEx ...