深入研究微服务架构——第三部分

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mzl87/article/details/85174093

目录

介绍

背景

什么是NancyFx?

什么是领域专用语言?

托管Nancy

NancyFx与ASP.Net Core Web API

NancyFx Hello World

使用代码

为自主机配置NancyFx

添加Nancy模块

扫描二维码关注公众号,回复: 4713742 查看本文章

调用服务


如何使用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

猜你喜欢

转载自blog.csdn.net/mzl87/article/details/85174093