zoukankan      html  css  js  c++  java
  • .Net微服务实践(二):Ocelot介绍和快速开始

    .Net微服务实践(二):Ocelot介绍和快速开始

    上篇.Net微服务实践(一):微服务框架选型 我们对微服务框架整体做了介绍,接下来我们从网关Ocelot开始,一一开始实践

    介绍

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly、Tracing集成。这些功能只都只需要简单的配置即可完成,下面我们会对这些功能的配置一一进行说明。

    基本原理

    简单的来说Ocelot是一堆的asp.net core middleware组成的一个管道。当它拿到请求之后会用一个request builder来构造一个HttpRequestMessage发到下游的真实服务器,等下游的服务返回response之后再由一个middleware将它返回的HttpResponseMessage映射到HttpResponse对象并返回给客户端。

    集成方式

    基本集成

    用一台web service来host Ocelot,在这里有一个json配置文件,里面设置了所有对当前这个网关的配置。它会接收所有的客户端请求,并路由到对应的下游服务器进行处理,再将请求结果返回。而这个上下游请求的对应关系也被称之为路由。

    集成IdentityServer

    当我们涉及到认证和鉴权的时候,我们可以跟Identity Server进行结合。当网关需要请求认证信息的时候会与Identity Server服务器进行交互来完成。

    网关集群

    只有一个网关是很危险的,也就是我们通常所讲的单点,只要它挂了,所有的服务全挂。这显然无法达到高可用,所以我们也可以部署多台Ocelot网关。当然这个时候在多台网关前,你还需要一台负载均衡器

    Consul服务发现

    在Ocelot已经支持简单的负载功能,也就是当下游服务存在多个结点的时候,Ocelot能够承担起负载均衡的作用。但是它不提供健康检查,服务的注册也只能通过手动在配置文件里面添加完成。这不够灵活并且在一定程度下会有风险。这个时候我们就可以用Consul来做服务发现,它能与Ocelot完美结合。

    集成Service Fabric

    快速开始

    创建订单服务

    • 新建一个新建asp.net core web api项目,命名为order-api, 模拟订单服务
    • 在order-api项目中,添加一个order api
    [ApiController]
    public class OrderController : ControllerBase
    {
       // GET: api/Product
        [Route("api/orders")]
        [HttpGet]
        public  IEnumerable<string> Get()
        {
            return new string[] { "刘明的订单", "王天的订单" };
        }
    }
    
    • 服务启动地址配置为http://localhost:5001

    创建产品服务

    • 新建一个新建asp.net core web api项目,命名为product-api, 模拟产品服务
    • 在product-api项目中,添加一个product api
    [ApiController]
    public class ProductController : ControllerBase
    {
        // GET: api/Product
        [Route("api/products")]
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "笔记本", "口罩" };
        }
    
    }
    
    • 服务启动地址配置为http://localhost:5002

    创建网关

    • 新建一个新建asp.net core web api项目,命名为ocelot-gateway, 这是网关

      项目结构图

    • Nuget添加Ocelot package

    • 添加Ocelot配置文件, 命名为Ocelot.json (放在appsettings.json平级目录)
      。我们暂且不管配置文件内容的含义,先快速把网关运行起来

    {
      "ReRoutes": [
        {
          "DownstreamPathTemplate": "/api/orders",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5001
            }
          ],
          "UpstreamPathTemplate": "/api/orders",
          "UpstreamHttpMethod": [ "Get" ]
        },
        {
          "DownstreamPathTemplate": "/api/products",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5002
            }
          ],
          "UpstreamPathTemplate": "/api/products",
          "UpstreamHttpMethod": [ "Get" ]
        }
      ],
      "GlobalConfiguration": {
        "BaseUrl": "http://localhost:5000"
      }
    }
    
    • 修改Program.cs文件,添加Ocelot配置文件
    Host.CreateDefaultBuilder(args)
     .ConfigureAppConfiguration((hostingContext, config) =>
     {
         config
             .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
             .AddJsonFile("appsettings.json", true, true)
             .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
             .AddJsonFile("Ocelot.json",false,true)
             .AddEnvironmentVariables();
     })
    
    • 修改Startup.cs, 在ConfigureServices中注入Ocelot组件
    services.AddOcelot()
    
    • 修改Startup.cs, 在Configure中添加Ocelot中间件
    app.UseOcelot().Wait();
    

    -- 服务启动地址配置为http://localhost:5000

    运行验证

    最后

    本篇我们介绍了Ocelot,它的实现原理,以及如何快速创建ocelot的helo world项目,下面我们会介绍Ocelot的主要特性:路由 .Net微服务实践(三):Ocelot配置路由和请求聚合

    示例代码下载地址: https://github.com/lcyhjx/ocelot-demo/tree/master

  • 相关阅读:
    软件工程14—第09组 Beta冲刺(2/4)
    软件工程13—第09组 Beta冲刺(1/4)
    软件工程12—第09组 Alpha事后诸葛
    软件工程11—第09组 Alpha冲刺(4/4)
    软件工程10—第09组 Alpha冲刺(3/4)
    软件工程09—第09组 Alpha冲刺(2/4)
    软件工程08—第09组 Alpha冲刺(1/4)
    软件工程07—第09组 团队Git现场编程实战
    软件工程06—亚瑟王の十三水2.0
    第06组 Alpha冲刺(4/6)
  • 原文地址:https://www.cnblogs.com/lihaijia/p/12654676.html
Copyright © 2011-2022 走看看