本篇內容介紹了“如何在.NET Core微服務中使用HostBuilder和Generic Host”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
自ASP.NET Core 1.0發布以來,我們有了WebHostBuilder類,它允許我們配置和構建WebHost。然后,當服務器(Kestrel)接受并處理HTTP請求時,它將處理應用程序的生命周期。在ASP.NET Core 2.0中,WebHostBuilder得到了一些進一步的改進和簡化。WebHostBuilder允許我們執行諸如使用依賴注入容器來配置服務的事情; 通常是由Microsoft提供的作為ASP.NET Core一部分的容器。WebHostBuilder還允許我們將來自多個源的配置加載到鍵/值對的最終配置表示中。
對于ASP.NET Core Web應用程序來說,這些工作非常好,但是到目前為止,在其他類型的應用程序的框架中沒有類似的選項!
注意:請記住,這篇文章是基于ASP.NET Core 2.1預覽版1發布的。因此,在公開預覽期間以及在最終發布2.1之前,事情可能會根據預覽期間收到的反饋進行更改。
使用.NET Core 2.1的開發人員可以使用的新選項是新的“通用”主機,它使開發人員能夠輕松設置橫切關注點,例如針對非Web焦點應用程序的日志記錄,配置和依賴注入。團隊已經認識到,將主機綁定到HTTP的關注可能不是一個理想的解決方案,因為其中許多這些東西是其他應用程序類型的通用要求。
可以使用這個地方的一個例子是在需要運行后臺處理任務的控制臺應用程序中,例如可能處理隊列中的消息?,F在,這些類型的服務在基于云的本地基于容器的體系結構中很常見。
在.NET Core的當前2.0版本中,當然可以在控制臺應用程序中使用日志記錄,配置和DI庫。在工作中,我們有許多微服務,它們處理來自隊列的消息和數據豐富任務。我們必須自己手動包含和設置這些常見問題。雖然這是可能的,但在應用程序中設置DI設置之類的東西需要一些管道。
要創建主機,我們可以使用新的HostBuilder,它具有與現有WebHostBuilder類似的一組方法和擴展。因此,使用ASP.NET Core的任何人都應該熟悉這些模式。
有一個主要的區別需要注意。HostBuilder不提供擴展方法,允許您像使用WebHostBuilder一樣使用啟動類。這個決定主要是為了避免在幕后創建兩個獨立的DI容器。使用通用主機,配置單個服務集合,然后用于構建最終服務提供者。
在您的應用程序的Main方法中,您可以先創建一個HostBuilder,然后使用擴展方法向DI注冊服務,讀取配置并配置您的應用程序所需的日志記錄。
解釋該功能的最佳方式是舉一個例子。如果你想查看完整的示例代碼,你可以從GitHub中獲取它。
如果我們看看這個控制臺應用程序的Main方法,我們可以探索為我們的應用程序創建一個Host。
如果您已經使用過ASP.NET Core,并且已經看到了WebHost構建器,特別是在1.0時間框架中,這看起來可能非常熟悉。我們首先創建一個HostBuilder,然后我們可以使用它來定義我們想要創建的主機。本例中的第一個方法是ConfigureAppConfiguration方法。這個方法允許我們配置應該使用哪個配置提供者來為我們的應用程序構造配置值的最終表示。
這與使用WebHostBuilder時可以自定義配置的方式相同。在這個例子中,我們已經說過,我們希望首先從appsettings.json文件中讀取配置值,然后是環境變量,最后是傳遞到應用程序中的任何參數。
接下來我們調用ConfigureServices,就像WebHostBuilder一樣,允許我們用ServiceCollection注冊服務。使用ServiceCollection上的擴展方法執行注冊,一旦完成,將使我們能夠在我們的應用程序中有DI可用的任何地方獲取這些注冊的實例。
在這種情況下,第一個添加了ASP.NET Core Options服務,第二個為IOptions綁定設置了注冊。最后的服務注冊是我稍后會談到的。
最后一節,ConfigureLogging如你所期望的那樣設置應用程序的日志記錄。在這種情況下,我們添加控制臺日志記錄,它使用應用程序配置中的值來確定要記錄的內容。
本示例中的日志記錄配置與使用模板創建的默認ASP.NET Core Web應用程序中的配置相同。
最后一步是在構建和啟動應用程序的HostBuilder上調用RunConsoleAsync。它會一直運行,直到CTRL + C被用來觸發它關閉。
如果我們把它留在這里,服務就不會太好。此時我們只是運行一個控制臺應用程序,但實際上并沒有做任何有用的事情。因此我們需要一種方法來定義應用程序應該執行的工作。
為這種服務風格推薦的模式是利用新的IHostedService功能,首先在ASP.NET Core 2.0中引入。
這里我們有一個基本的IHostedService實現,它將在這個服務中運行...
我不會深入研究這些代碼,但我會總結一下它在做什么。當應用程序啟動時,它將在此服務上調用StartAsync。在該方法中,我們創建了一個每5秒鐘執行一次工作的定時器。
作品本身在DoWork中定義。這里只是用戶將ILogger記錄為信息。這包括從應用程序配置中檢索的消息。這是通過DI傳遞給服務的IOptions對象訪問的。
在關機時,StopAsync被調用,服務在應用程序被終止之前清理一點。這是一個非常人為的例子,但我想簡單地把事情放在一起,并專注于這些部分如何組合在一起。
通過定義IHostedService實現,我們只需使用ConfigureServices中的以下常見操作(我們在前面看到)將其注冊到DI容器。
services.AddSingleton<IHostedService, PrintTextToConsoleService>();
如果我們需要在此服務中運行各種東西,我們可以添加多個托管服務。
使用這種新的“通用”主機概念有很多情況。在這篇文章中,我們已經探索了一個非?;镜睦?,但是我不需要太多的工作來簡化我們環境中的一些微服務。對于Web應用程序和服務有一個通用模式,并且可以輕松訪問DI,日志記錄和配置等特性,這是非常受歡迎的。
“如何在.NET Core微服務中使用HostBuilder和Generic Host”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。