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: 上周五離職嘍~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM