• Quartz.NET总结(七)使用Topshelf 开发windows服务


      在业务系统中,我们为了调度一些自动执行的任务或从队列中消费一些消息,所以基本上都会涉及到后台服务的开发。如果用windows service开发,非常不爽的一件事就是:调试相对麻烦,而且你还需要了解 windows service 相关的一些开发和安装部署,所以,windows service非常的不方便。Topshelf框架,能够让你将 console application 直接封装为 windows service,这样你在开发的时候,就可以直接在console 程序上开发,然后构成windows service。可以说非常方便。省去了很多不必要的麻烦。

     

      Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。TopShelf 支持多个服务实例,使用的API非常简单,也提高了和 Log4Net的集成,结合Quartz.net,可以快速实现任务调度服务。

     

      1.下载地址

        https://github.com/Topshelf/Topshelf/downloads

     

      2.创建Console宿主程序TopshelfTest,并引用TopShelf.dll

     

      3.相关代码

    public class TownCrier
    {
    
        readonly Timer _timer;
    
        public TownCrier()
        {
    
            _timer = new Timer(1000) { AutoReset = true };
    
            _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is {0} and all is well", DateTime.Now);
    
        }
    
        public void Start() { _timer.Start(); }
    
        public void Stop() { _timer.Stop(); }
    
    }
    
    
    
    // 入口代码
    
    public class Program
    {
    
        public static void Main()
        {
    
            HostFactory.Run(x =>                                             //1.我们用HostFactory.Run来设置一个宿主主机。我们初始化一个新的lambda表达式X,来显示这个宿主主机的全部配置。
            {
    
                x.Service<TownCrier>(s =>                                   //2.告诉Topshelf ,有一个类型为“towncrier服务”,通过定义的lambda 表达式的方式,配置相关的参数。
                {
    
                    s.ConstructUsing(name => new TownCrier());          //3.告诉Topshelf如何创建这个服务的实例,目前的方式是通过new 的方式,但是也可以通过Ioc 容器的方式:getInstance<towncrier>()。
      
                    s.WhenStarted(tc => tc.Start());                       //4.开始 Topshelf 服务。
    
                    s.WhenStopped(tc => tc.Stop());                       //5.停止 Topshelf 服务。
    
                });
    
                x.RunAsLocalSystem();                                         //6.这里使用RunAsLocalSystem() 的方式运行,也可以使用命令行(RunAsPrompt())等方式运行。
    
                x.SetDescription("Sample Topshelf Host");                  //7.设置towncrier服务在服务监控中的描述。
    
                x.SetDisplayName("Stuff");                                    //8.设置towncrier服务在服务监控中的显示名字。
    
                x.SetServiceName("Stuff");                                    //9.设置towncrier服务在服务监控中的服务名字。
    
            });
    
        }
    
    }

      本人英文水平有限,代码的备注说明,随便翻译的,凑合看吧。

     

      4. 安装和卸载windows服务

                     TopshelfTest.exe install        #安装Windows服务

         TopshelfTest.exe uninstall     #卸载Windows服务

         TopshelfTest.exe install -instance "xxx" -servicename "xxx" -description "xxx" -displayname "xxx"    #安装不同的实例

     

  • 相关阅读:
    Chapter 7、面向对象(二)---类 (4th,Mar.)
    Chapter 7、面向对象(一)--- 概述
    值类型,引用类型
    Chapter 6、字符串(二)(1st,Mar.)
    练习:判断字符串“mingrikejijavabu”中,字符“i”出现了几次,并将结果输出。
    函数对象
    顺序容器:双向链表 list
    顺序容器:vector和deque 的程序举栗子
    STL中的 “大”、“小”和 “相等”
    标准模板库STL中常用的算法
  • 原文地址:https://www.cnblogs.com/zhangweizhong/p/4683789.html
Copyright © 2020-2023  润新知