zoukankan      html  css  js  c++  java
  • topshelf 开发windows 服务资料

    官方配置

    http://docs.topshelf-project.com/en/latest/configuration/config_api.html#service-start-modes

    topshelf

    转载 2016年03月17日 13:45:13

    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版本:

    问题一:不使用Package管理工具如何安装Package呢?
    答:使用Package Manager Console.
     
    问题二: 如何安装特定版本的程序集?
    答: 在 Package Manager Console 中使用 带参数的 Install-Package 命令
    通过  TooLS -> Libary Manager Console -> Package Manager Console 即可打卡面板。
    输入Install-Package Microsoft.AspNet.SignalR -Version 1.1.0(使用SignaR 1.1.0 为例子)
     
    问题三:如何卸载特定的Package呢?
    答:使用 Uninstall-Package 命令
    例如:Uninstall-Package Microsoft.AspNet.SignalR -Version 1.1.0
     

    示例代码:

    复制代码
    复制代码
     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入门

  • 相关阅读:
    java连接sqlserver2008报错 java.sql.SQLException: 对象名 '表名' 无效.
    hibernate中增加annotation @后不提示信息【转】
    java.io.IOException: Could not find resource SqlMapConfig.xml
    制作Lightbox效果
    myeclipse 启动卡住的解决办法
    SVN使用教程
    js基础关系运算符
    mysql怎样更改密码和用户名
    js实现点击按钮传值
    记一次Tomcat运行失败记录
  • 原文地址:https://www.cnblogs.com/micro-chen/p/7943416.html
Copyright © 2011-2022 走看看