zoukankan      html  css  js  c++  java
  • topshelf和quartz

    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/

  • 相关阅读:
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    PHP extract() 函数
    PHP end() 函数
    PHP each() 函数
    PHP current() 函数
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4953739.html
Copyright © 2011-2022 走看看