1. 程式人生 > >深入研究微服務架構——第三部分

深入研究微服務架構——第三部分

目錄

介紹

背景

什麼是NancyFx?

什麼是領域專用語言?

託管Nancy

NancyFx與ASP.Net Core Web API

NancyFx Hello World

使用程式碼

為自主機配置NancyFx

新增Nancy模組

呼叫服務


如何使用NancyFx構建微服務

介紹

本文的第一部分詳細討論了微服務架構(MSA),並試圖解釋MSA的基本術語及其概念。第二部分討論了OWIN框架,並舉例說明了如何使用它。本部分將討論NancyFx,並將嘗試在構建基於MSA

的服務時使用此框架。在您開始閱讀本部分之前,如果您沒有任何關於MSA的背景知識,我建議您閱讀第一部分

背景

正如我們在第二部分中討論的那樣,直接使用IISApacheHTTP.sysWeb伺服器(在擁有獨立服務的情況下)存在一些問題,例如平臺依賴性,在核心級別有限的併發連線等。有關更多資訊,您可以在第二部分的背景中閱讀更多內容  

我們還非常簡單地討論了為什麼Windows通訊功能(WCF)在將Web應用程式與Web伺服器分離方面並沒有真正成功,以及OWIN框架如何通過在Web伺服器和Web應用程式之間引入標準介面來實現這一點。我們還提到了如何在OWIN

環境中輕鬆實現RESTful服務而不是WCF服務。

在這一部分中,我將通過引入一個名為NancyFx的新框架來繼續這個主題,我個人認為它是一個非常性感的框架,就像Nancy本身一樣!然而,有些事情似乎很難用Nancy完成,他們在MVC中使用OWIN開箱即用,比如DryIocswagger,屬性注入。這可能是一個嚴重的缺點。

什麼是NancyFx

Nancy的開發人員說,“ Nancy是一個輕量級,低儀式的框架,用於在.NETMono上構建基於HTTP的服務。該框架的目標是儘可能地避開並提供一個超級的——所有互動的快樂之路 “。我不會在這個定義上新增更多內容,因為它正如他們所描述的那樣。我個人發現

Nancy的使用非常方便而且不那麼複雜。南希被設計成域特定語言(DSL)的處理DELETEGETHEADOPTIONSPOSTPUT, PATCH請求。

Nancy提供了一種非常簡單的方法來建立基於HTTP的服務。它允許您建立服務並開始通過HTTP協議進行通訊,而專案中的配置工作幾乎為零。它支援多種內容,如JSONHTMLXML和純文字。

什麼是領域專用語言?

領域專用語言是一種計算機語言,專為特定領域設計,與通用語言(GPL)(如CJavaXMLUML等)形成對比。但是,這兩者之間的界限並不總是很明顯。

託管Nancy

Nancy可以使用ASP.NETWCFAzureSuave.IOOWINWebKatana),Self HostingUmbraco以及Ubunt上的Nginx進行託管。

NancyFxASP.Net Core Web API

重要的是要真正瞭解什麼是Nancy以及什麼時候可以使用。要更好地學習,總是將它與類似技術進行比較是一種簡單的方法。所以我決定將NancyASP.NET MVCWebApi進行比較,以非常簡短地展示Nancy的優勢。

1NancyFxWeb API

ASP.NET Core Web API

NancyFx

開發人員廣泛用於在.NET Framework上開發RESTful應用程式。

用於在.Net Framework上構建基於HTTP的服務的開源和輕量級框架。

必須在開發基於HTTP的服務之前正確配置。

強調合理和預設的設定。意味著開發人員可以在不處理複雜配置的情況下開始使用Nancyfx

使用基於約定的路由機制,換句話說,它使用MVC路由機制來路由HTTP請求。

它允許通過指定Method + Pattern + Action +(可選)Condition來定義模組建構函式中的路由。

使用HTTPclient與各種應用程式和客戶端進行互動。

它設計有充當託管環境的主機。

可以由支援.NET 4.0+IIS和其他Web伺服器託管,甚至可以作為自託管框架託管。

可以由各種環境託管,而不依賴於任何特定框架。

Web API構建於ASP.NET之上。它通過HTTPclientWeb API伺服器通訊。

使用.NET Framework客戶端配置檔案開發。但是,它包含自己的請求和響應物件。

NancyFx Hello World

現在是時候開始NancyFx,看看如何使用它。在從儲存庫下載原始碼之前,您需要記住在開啟它之後需要在專案上恢復/重新安裝以下NuGet包(通常,Visual Studio應該負責這部分)。

Nancy                               {1.4.5}
Nancy.Hosting.Self                  {1.4.1}
Nancy.Owin                          {1.4.1}
Owin                                {1.0}  

否則,您可以從PM控制檯或Nuget包管理器安裝它們。

使用程式碼

下面的部分將解釋使用三個著名的類,分別是StartupNancyModule以及Program,它們用於保持服務在NancyFx框架上啟動和執行。

為自主機配置NancyFx

這裡NancyFx依賴於OWIN來使用AppBuilderIAppBuilder介面的實現者)。以下程式碼顯示配置。

using Owin;

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseNancy();
    }
}

如您所見,您只需要使用Owin.dll 來構建您的Nancy自託管Startup。如果將此部分與OWIN Framework Web API配置進行比較,將會很有趣。

新增Nancy模組

根據Nancy的官方網站,模組是你無法避免的一件事,因為它們是你定義應用程式行為的地方。” 換句話說,NancyFx中的模組與API ControllerOWIN Framework中的功能相同。要建立模組,您需要從NancyModule類繼承它。

以下程式碼將定義不同的GET和一個POST的行為。在前一部分中,我們已經實現並測試了它們。第一個GET 將返回一個string陣列,第二個GET 將根據您在GET 請求中給出的內容返回一個正確的值,並且POST 將從正文接收資料並通過使用Nancy.Extensions類中的擴充套件方法將其轉換為string 

using Nancy;
using Nancy.Extensions;
using System;

namespace NancyFxMicroservice
{
    public class HelloWorldModule : NancyModule
    {
        public HelloWorldModule():base("api")
        {
            Get["/values"] = parameters => new string[] { "Hello", "World", "...!" };
            Get["/values/{id}"] = parameters => (parameters.id.Value == "1") ? 
            "Hello" : (parameters.id.Value == "2") ? "World" : (parameters.id.Value == "3") ? 
            "...!" : "No world found... ;-)";
            Post["/values"] = _ => 
            {
                var value = Context.Request.Body.AsString();
                Console.WriteLine($"The received value is:{value}");
                return HttpStatusCode.OK;
            };
        }
    }
}

呼叫服務

要呼叫的服務,我們首先需要通過一種方式Program.cs中定義並執行一個特定的URL,在這種情況下:http://localhost:9000

using System;
using Nancy.Hosting.Self;

namespace NancyFxMicroservice
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var host = new NancyHost(new Uri("http://localhost:9000")))
            {
                host.Start();
                Console.WriteLine("Running on http://localhost:9000");
                Console.ReadLine();
            }
        }
    }
}

與前一部分完全一樣,我們可以使用Postman向服務傳送HTTPGETPOST請求,並在控制檯或除錯視窗中檢視結果。按照上一部分中提到的步驟操作並測試您的服務。

轉到上一部分

原文地址:https://www.codeproject.com/Articles/1270792/Dive-into-Microservices-Architecture-Part-III