深入研究微服務架構——第三部分
目錄
如何使用NancyFx構建微服務
介紹
本文的第一部分詳細討論了微服務架構(MSA),並試圖解釋MSA的基本術語及其概念。第二部分討論了OWIN框架,並舉例說明了如何使用它。本部分將討論NancyFx,並將嘗試在構建基於MSA
背景
正如我們在第二部分中討論的那樣,直接使用IIS,Apache或HTTP.sys等Web伺服器(在擁有獨立服務的情況下)存在一些問題,例如平臺依賴性,在核心級別有限的併發連線等。有關更多資訊,您可以在第二部分的背景中閱讀更多內容 。
我們還非常簡單地討論了為什麼Windows通訊功能(WCF)在將Web應用程式與Web伺服器分離方面並沒有真正成功,以及OWIN框架如何通過在Web伺服器和Web應用程式之間引入標準介面來實現這一點。我們還提到了如何在OWIN
在這一部分中,我將通過引入一個名為NancyFx的新框架來繼續這個主題,我個人認為它是一個非常性感的框架,就像Nancy本身一樣!然而,有些事情似乎很難用Nancy完成,他們在MVC中使用OWIN開箱即用,比如DryIoc,swagger,屬性注入。這可能是一個嚴重的缺點。
什麼是NancyFx?
Nancy的開發人員說,“ Nancy是一個輕量級,低儀式的框架,用於在.NET和Mono上構建基於HTTP的服務。該框架的目標是儘可能地避開並提供一個超級的——所有互動的快樂之路 “。我不會在這個定義上新增更多內容,因為它正如他們所描述的那樣。我個人發現
Nancy提供了一種非常簡單的方法來建立基於HTTP的服務。它允許您建立服務並開始通過HTTP協議進行通訊,而專案中的配置工作幾乎為零。它支援多種內容,如JSON,HTML,XML和純文字。
什麼是領域專用語言?
領域專用語言是一種計算機語言,專為特定領域設計,與通用語言(GPL)(如C,Java,XML,UML等)形成對比。但是,這兩者之間的界限並不總是很明顯。
託管Nancy
Nancy可以使用ASP.NET,WCF,Azure,Suave.IO,OWIN,Web(Katana),Self Hosting,Umbraco以及Ubunt上的Nginx進行託管。
NancyFx與ASP.Net Core Web API
重要的是要真正瞭解什麼是Nancy以及什麼時候可以使用。要更好地學習,總是將它與類似技術進行比較是一種簡單的方法。所以我決定將Nancy與ASP.NET MVC和WebApi進行比較,以非常簡短地展示Nancy的優勢。
表1:NancyFx與Web 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之上。它通過HTTPclient與Web 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包管理器安裝它們。
使用程式碼
下面的部分將解釋使用三個著名的類,分別是Startup,NancyModule以及Program,它們用於保持服務在NancyFx框架上啟動和執行。
為自主機配置NancyFx
這裡NancyFx依賴於OWIN來使用AppBuilder(IAppBuilder介面的實現者)。以下程式碼顯示配置。
using Owin;
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseNancy();
}
}
如您所見,您只需要使用Owin.dll 來構建您的Nancy自託管Startup。如果將此部分與OWIN Framework Web API配置進行比較,將會很有趣。
新增Nancy模組
根據Nancy的官方網站,“模組是你無法避免的一件事,因為它們是你定義應用程式行為的地方。” 換句話說,NancyFx中的模組與API Controller在OWIN 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向服務傳送HTTP,GET和POST請求,並在控制檯或除錯視窗中檢視結果。按照上一部分中提到的步驟操作並測試您的服務。
原文地址:https://www.codeproject.com/Articles/1270792/Dive-into-Microservices-Architecture-Part-III