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早先有系列介绍过,只贴下链接。

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

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

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

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

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

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

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

PS: 上周五离职喽~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木头编程 - moTzxx

Laravel+Layer 图片上传功能整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

85820
来自专栏Script Boy (CN-SIMO)

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo。 题解:   本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界。 本来计划是讲解Qt源码静态编译...

56110
来自专栏散尽浮华

进程管理利器-supervisor部署记录

一、简单介绍 supervisor是用来管理进程的一个工具,止于为什么要用supervisor,是因为相对于linux传统的进程管理方式来说,它有很多的优势: ...

42880
来自专栏我和PYTHON有个约会

爬虫0020:urllib2操作urllib2的使用

至此,我们可以描述爬虫程序,就是用来根据一定的规则采集获取网络中的数据的! 整个采集过程主要步骤如下:

12630
来自专栏MelonTeam专栏

Android动态权限

导语 随机聊需求中出现几个涉及权限的bug,所以对动态权限机制做了一个简单的整理。 概述 Android应用程序通过请求权限来访问设备数据,例如联...

22150
来自专栏漫漫全栈路

Nginx配置文件nginx.conf详解

最近折腾Ubuntu比较多,也基本原理了Windows和IIS了,论一个软狗的堕落史。既然换到Ubuntu系统上来,勉强算个web开发人员的我当然用的最多的就...

78370
来自专栏挖坑填坑

.net core + angular 项目中使用ueditor遇到的问题

这是两个问题, 1、angular中使用ueditor 2、.net core 中使用ueditor

14920
来自专栏互联网技术栈

Redis 队列

举例: 队列主要用在系统解耦、流量削峰、异步处理、数据顺序处理等场景。新手在使用时可能会犯一些常见的错误。下面讲一个新手容易犯的错误,在这个示例中把队列的入...

59750
来自专栏左瞅瞅,右瞅瞅

ELK的上线之路(五):—— Logstash进阶解耦

path => "/var/log/ucdisk/ucdisk-error.log"

25730
来自专栏杂烩

在CentOS下搭建自己的Git服务器 转

首先需要装好CentOS系统,作为测试,你可以选择装在虚拟机上,这样比较方便。这步默认你会,就不讲了。 有了CentOS,那么如何搭建Git服务器呢? 1...

16830

扫码关注云+社区

领取腾讯云代金券