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"    #安裝不同的實例

 


免責聲明!

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



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