• .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

  • 相关阅读:
    Leetcode 16.25 LRU缓存 哈希表与双向链表的组合
    Leetcode437 路径总和 III 双递归与前缀和
    leetcode 0404 二叉树检查平衡性 DFS
    Leetcode 1219 黄金矿工 暴力回溯
    Leetcode1218 最长定差子序列 哈希表优化DP
    Leetcode 91 解码方法
    Leetcode 129 求根到叶子节点数字之和 DFS优化
    Leetcode 125 验证回文串 双指针
    Docker安装Mysql记录
    vmware虚拟机---Liunx配置静态IP
  • 原文地址:https://www.cnblogs.com/lcyhjx/p/12649936.html
Copyright © 2020-2023  润新知