topshelf和quartz
topshelf和quartz内部分享
阅读目录:
上月在公司内部的一次分享,现把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设计
topshelf和quartz.net可以配合使用,开发一些定时任务类的服务较为方便。
PS: 上周五离职喽~
topshelf和quartz的更多相关文章
- topshelf和quartz内部分享
阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...
- 子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)
Ø 前言 本文主要记录子线程导致 Topshelf 和 Quartz.NET 的 Windows 服务停止的现象,以及使用几种常用子线程的注意事项.因为我们有时可能需要开启多个线程执行复杂的逻辑,如 ...
- 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务
Ø 前言 之前一篇文章已经介绍了,如何使用 Topshelf 创建 Windows 服务.当时提到还缺少一个任务调度框架,就是 Quartz.NET.而本文就展开对 Quartz.NET 的研究,以 ...
- Topshelf结合Quartz.NET实现服务端定时调度任务
这周接受到一个新的需求:一天内分时间段定时轮询一个第三方WebAPI,并保存第三方WebAPI结果. 需求分析:分时段.定时开启.定时结束.轮询.主要工作集中在前三个上,轮询其实就是个Http请求,比 ...
- Quartz和TopShelf Windows服务作业调度
上一次写了一遍关于Quartz作业调度的文章 Quartz.NET 作业调度使用 现在使用TopShelf和Quartz实现windows服务作业调度 TopShelf版本4.0 Quartz版本3. ...
- Aspnet Zero中使用Windows service (Topshelf)来承载Quartz.net任务
Aspnet Zero使用Windows service (Topshelf)来承载Quartz.net任务 网上有很多关于如何使用Topshelf创建ABP的Quartz windows服务,但很少 ...
- Quartz.NET 入门
概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...
- Quartz.NET 入门(转)
概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...
- 快速搭建一个Quartz定时任务【转载,好文 ,值得收藏,亲身试用 效果不错】
Quartz.NET 入门 概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔 ...
随机推荐
- Codeforces 4A-Watermelon(意甲冠军)
A. Watermelon time limit per test 1 second memory limit per test 64 megabytes input standard input o ...
- 【Android UI】案例03滑动切换效果的实现(ViewPager)
本例使用ViewPager实现滑动切换的效果.本例涉及的ViewPager.为android.support.v4.view.ViewPager.所以须要在android项目中导入android-su ...
- OpenCV基础篇之画图及RNG随机数对象
程序及分析 /* * FileName : random_gen.c * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 29 ...
- ViewPager.getChildCount() 含义
viewpager.getChildCount() 非常easy误解成viewpager子页面的size.它和getCount还是有差别的 getChildCount() 是表示当前可见页size 比 ...
- C++ 复制功能
C++ 复制功能 说C++复制功能,它可能不是很熟悉.类中的拷贝构造函数和赋值操作符.可是其实或许我们一不小心就会忽略编译器所做的一些默认操作.引起晦涩的错误.以下分析几种场景: 一.场景一:所有默认 ...
- 三星Samsung 4.4.2该负责人制度,简化名单
installed uninstalled AccessControl.apk AllshareControlShare.apk AirMotionTryActually.apk AllshareFi ...
- Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)
Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试) 本篇博客介绍Cocos2d-x 3.2Lua演示样例中点击移动的样例,在这个样例你能够得到怎样创建单点触 ...
- Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制器 完全破解+使用教程
原文:Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制器 完全破解+使用教程 Red Gate系列之二 SQL Source Co ...
- 点击 下载 pdf
<iframe id="fileDownFrame" src="" style="display:none; visibility:hidde ...
- SharePoint综合Excel数据与Excel Web Access Web部分
SharePoint综合Excel数据与Excel Web Access Web部分 Excel Web Access Web零件SharePoint于Excel以电子形式提交数据. 1. 打开Exc ...