topshelf和quartz内部分享

阅读目录:

  1. 介绍
  2. 基础用法
  3. 调试及安装
  4. 可选配置
  5. 多实例支持及相关资料
  6. quartz.net

上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客。

介绍

topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 我们只需要几行代码即可实现windows服务的开发。topshelf本身支持windows及linux下mono上部署安装,同样也是开源的。

topshelf相对原生来说,调试起来比较方便,可以在开发时以控制台的形式直接f5调试,发布时用命令以服务的形式部署。还一个比较有用的特性是支持多实例的部署,这样可以在一台机器上部署多个相对的服务。类似的工具有instsrv和srvany。

基础用法

Topshelf使用起来比较简单,通过nuget直接安装即可,目前最新的是3.2版本:

示例代码:

 HostFactory.Run(x =>
{
x.Service<Manager>(s =>
{
s.ConstructUsing(name => new Manager());
s.WhenStarted(tc => tc.OnStart());
s.WhenStopped(tc => tc.OnStop());
});
x.RunAsLocalSystem();
x.SetDescription("Topshelf测试例子");
x.SetDisplayName("TopshelfExample");
x.SetServiceName("TopshelfExample");
});

其中Run方法的回调参数方法,在运行时执行,方法内是一些配置信息。

其中manager类是我们服务实现类,服务启动时通过WhenStarted调用对应实现的OnStart,停止一样。

RunAsLocalSystem()表示以本地系统账号运行,可选的还有网络服务和本地服务账号。

SetDescription("Topshelf测试例子"); 设置服务的描述

SetDisplayName("TopshelfExample"); 设置服务的显示名称

x.SetServiceName("TopshelfExample"); 设置服务的名称

Manager服务实现类:

 public class Manager
{
public void OnStart()
{
Console.WriteLine("Service start.");
}
public void OnStop()
{
Console.WriteLine("Service stopped.");
}
}

调试及安装

调试和平常一样,直接f5即可:

安装时以管理员身份运行CMD,进入程序目录。

输入安装命令: TopshelfExample.exe install topshelf以事务的形式安装,只有成功和失败,兼容性较好,示例:

启动命令是TopshelfExample.exe start,停止TopshelfExample.exe stop

可选配置

topshelf虽小但支持的可配置选项比较多,以下是部分示例:

  • SetStartTimeout启动超时
  • SetStopTimeout停止超时
  • BeforeUninstall卸载前
  • AfterUninstall 卸载后回调
  • AfterInstall安装后回调
  • AfterRollback回滚后回调
  • DependsOnMsmq Msmq启动后再启动
  • EnablePauseAndContinue支持暂停
  • UseLog4Net (“.config")集成log4Net
  • UseNLog集成Nlog

多实例支持及相关资料

原生服务上是不支持的,topshelf支持使用不同的名称来部署多个同样的程序实例。 启动一个新实例:

TopshelfExample.exe –instance “newinstallname” install

start、top命令和原先参数格式一样,如卸载:

TopshelfExample.exe –instance "TopshelfExample2" uninstall

多实例有一个好处就是容灾,当一个服务部署多份时,这样其中任何一个服务实例挂了,剩余的可以继续执行。 多实例可以是主备的方式,主挂了备服务才会执行。也可以以负载均衡的方式实现,多实例抢占进程锁或分布式锁,谁拿到谁执行。

文档索引
github地址
topshelf命令列表
TopshelfExample.exe help

quartz.net

关于quartz.net早先有系列介绍过,只贴下链接。

Net作业调度(五)—quartz.net动态添加job设计

Net作业调度(四)—quartz.net持久化和集群

Net作业调度(三) — Quartz.Net进阶

Net作业调度(二) -CrystalQuartz远程管理

Net作业调度(一) -Quartz.Net入门

topshelf和quartz.net可以配合使用,开发一些定时任务类的服务较为方便。

PS: 上周五离职喽~

作者:蘑菇先生 出处:http://mushroom.cnblogs.com/

topshelf和quartz的更多相关文章

  1. topshelf和quartz内部分享

    阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...

  2. 子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)

    Ø  前言 本文主要记录子线程导致 Topshelf 和 Quartz.NET 的 Windows 服务停止的现象,以及使用几种常用子线程的注意事项.因为我们有时可能需要开启多个线程执行复杂的逻辑,如 ...

  3. 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务

    Ø  前言 之前一篇文章已经介绍了,如何使用 Topshelf 创建 Windows 服务.当时提到还缺少一个任务调度框架,就是 Quartz.NET.而本文就展开对 Quartz.NET 的研究,以 ...

  4. Topshelf结合Quartz.NET实现服务端定时调度任务

    这周接受到一个新的需求:一天内分时间段定时轮询一个第三方WebAPI,并保存第三方WebAPI结果. 需求分析:分时段.定时开启.定时结束.轮询.主要工作集中在前三个上,轮询其实就是个Http请求,比 ...

  5. Quartz和TopShelf Windows服务作业调度

    上一次写了一遍关于Quartz作业调度的文章 Quartz.NET 作业调度使用 现在使用TopShelf和Quartz实现windows服务作业调度 TopShelf版本4.0 Quartz版本3. ...

  6. Aspnet Zero中使用Windows service (Topshelf)来承载Quartz.net任务

    Aspnet Zero使用Windows service (Topshelf)来承载Quartz.net任务 网上有很多关于如何使用Topshelf创建ABP的Quartz windows服务,但很少 ...

  7. Quartz.NET 入门

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

  8. Quartz.NET 入门(转)

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

  9. 快速搭建一个Quartz定时任务【转载,好文 ,值得收藏,亲身试用 效果不错】

    Quartz.NET 入门 概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔 ...

随机推荐

  1. AngularJs 基础(60分钟入门) (转)

    AngularJs是一个不错的用于开发SPA应用(单页Web应用)的框架.单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.浏览器一开始会 ...

  2. Study note for Continuous Probability Distributions

    Basics of Probability Probability density function (pdf). Let X be a continuous random variable. The ...

  3. 在自己的base脚本中实现自动补全

    在90年代Linux和DOS共存的年代里,Linux的Shell们有一个最微不足道但也最实用的小功能,就是命令自动补全.而DOS那个笨蛋一直到死都没学会什么叫易用. Linux的这个微不足道的小传统一 ...

  4. windows phone 独立存储空间的操作 (2)

    原文:windows phone 独立存储空间的操作 (2) IsolatedStorage独立存储空间是保存应用程序的一些数据已经配置文件,独立存储空间相对于其他的wp程序是独立的,也就是说每个wp ...

  5. NSUserDefaults写作和阅读对象定义自己

    需要编写对象必须实现NSCoding protocol Person Class Person.h #import <Foundation/Foundation.h> #import &q ...

  6. poj 2253 Frogger (最长路中的最短路)

    链接:poj 2253 题意:给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过随意石头到达B, 问从A到B多条路径中的最长边中的最短距离 分析:这题是最短路的变形,曾经求的是路径总长的最 ...

  7. java打印各种菱形

    /** * 类说明 * * @author 曾修建 * @version 创建时间:2014-7-23 上午09:50:46 */ public class Diamond { public stat ...

  8. [windows phone] 教你如何使地图动画缩放

    原文:[windows phone] 教你如何使地图动画缩放 说明 本篇将介绍如何将地图以动画显示呈现,在以下的范例介绍中可以看到有动画跟没动画的差别,如果你的地图还是很单调的话,不仿加上这个设计,让 ...

  9. OpenVPN-ng,为移动续航的应用层隧道

    VPN,让人觉得它总是做好事的,是逃离监管的途径,其实VPN已经成了逃离监管的唯一代名词.你看,无论是什么技术,IPSec也好,WEB代理也罢,仅仅要是加密了原始信息的技术,都能够叫做VPN,于是乎就 ...

  10. 使用cm-12.0源代码编译twrp

    Select the newest branch available. This step is not necessary with Omni because Omni already includ ...