目录
介绍
背景
什么是NancyFx?
什么是领域专用语言?
托管Nancy
NancyFx与ASP.Net Core Web API
NancyFx Hello World
使用代码
为自主机配置NancyFx
添加Nancy模块
调用服务
如何使用NancyFx构建微服务
- 从Git存储库下载该项目的源代码
本文的第一部分详细讨论了微服务架构(MSA),并试图解释MSA的基本术语及其概念。第二部分讨论了OWIN框架,并举例说明了如何使用它。本部分将讨论NancyFx,并将尝试在构建基于MSA的服务时使用此框架。在您开始阅读本部分之前,如果您没有任何关于MSA的背景知识,我建议您阅读第一部分。
背景正如我们在第二部分中讨论的那样,直接使用IIS,Apache或HTTP.sys等Web服务器(在拥有独立服务的情况下)存在一些问题,例如平台依赖性,在内核级别有限的并发连接等。有关更多信息,您可以在第二部分的背景中阅读更多内容 。
我们还非常简单地讨论了为什么Windows通信功能(WCF)在将Web应用程序与Web服务器分离方面并没有真正成功,以及OWIN框架如何通过在Web服务器和Web应用程序之间引入标准接口来实现这一点。我们还提到了如何在OWIN环境中轻松实现RESTful服务而不是WCF服务。
在这一部分中,我将通过引入一个名为NancyFx的新框架来继续这个主题,我个人认为它是一个非常性感的框架,就像Nancy本身一样!然而,有些事情似乎很难用Nancy完成,他们在MVC中使用OWIN开箱即用,比如DryIoc,swagger,属性注入。这可能是一个严重的缺点。
什么是NancyFx?Nancy的开发人员说,“ Nancy是一个轻量级,低仪式的框架,用于在.NET和Mono上构建基于HTTP的服务。该框架的目标是尽可能地避开并提供一个超级的——所有互动的快乐之路 “。我不会在这个定义上添加更多内容,因为它正如他们所描述的那样。我个人发现Nancy的使用非常方便而且不那么复杂。南希被设计成域特定语言(DSL)的处理DELETEGET,HEAD,OPTIONS,POST,PUT, 和PATCH请求。
Nancy提供了一种非常简单的方法来创建基于HTTP的服务。它允许您创建服务并开始通过HTTP协议进行通信,而项目中的配置工作几乎为零。它支持多种内容,如JSON,HTML,XML和纯文本。
什么是领域专用语言?领域专用语言是一种计算机语言,专为特定领域设计,与通用语言(GPL)(如C,Java,XML,UML等)形成对比。但是,这两者之间的界限并不总是很明显。
托管NancyNancy可以使用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