閱讀目錄:html
上月在公司內部的一次分享,現把PPT及部分交流內容整理成博客。linux
topshelf是建立windows服務的一種方式,相比原生實現ServiceBase、Install.Installer更爲簡單方便, 咱們只須要幾行代碼便可實現windows服務的開發。topshelf自己支持windows及linux下mono上部署安裝,一樣也是開源的。git
topshelf相對原生來講,調試起來比較方便,能夠在開發時以控制檯的形式直接f5調試,發佈時用命令以服務的形式部署。還一個比較有用的特性是支持多實例的部署,這樣能夠在一臺機器上部署多個相對的服務。相似的工具備instsrv和srvany。github
Topshelf使用起來比較簡單,經過nuget直接安裝便可,目前最新的是3.2版本:windows
示例代碼:網絡
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雖小但支持的可配置選項比較多,如下是部分示例:
原生服務上是不支持的,topshelf支持使用不一樣的名稱來部署多個一樣的程序實例。 啓動一個新實例:
TopshelfExample.exe –instance 「newinstallname」 install
start、top命令和原先參數格式同樣,如卸載:
TopshelfExample.exe –instance "TopshelfExample2" uninstall
多實例有一個好處就是容災,當一個服務部署多份時,這樣其中任何一個服務實例掛了,剩餘的能夠繼續執行。 多實例能夠是主備的方式,主掛了備服務纔會執行。也能夠以負載均衡的方式實現,多實例搶佔進程鎖或分佈式鎖,誰拿到誰執行。
文檔索引
github地址
topshelf命令列表
TopshelfExample.exe help
關於quartz.net早先有系列介紹過,只貼下連接。
Net做業調度(五)—quartz.net動態添加job設計
topshelf和quartz.net能夠配合使用,開發一些定時任務類的服務較爲方便。
PS: 上週五離職嘍~