.NetCore·集成Ocelot组件之完全解决方案

本文详细介绍了如何在.NetCore环境中集成和使用Ocelot作为API Gateway,包括开发环境设置、Ocelot的基本配置、与Consul的结合、缓存、熔断和限流等功能的实现。此外,还提到了Ocelot与其他组件如Nginx、Swagger和IdentityServer4的集成,以及在实际使用中可能遇到的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅文时长 | 11.04分钟 字数统计 | 17672.8字符
主要内容 | 1、前言、环境说明、预备知识 2、Ocelot基本使用 3、Ocelot功能挖掘 4、Ocelot集成其他组件 5、避坑指南 6、更多的学习资料
『.NetCore·集成Ocelot组件之完全解决方案』
编写人 | SCscHero 编写时间 | 2020/9/9 PM5:57
文章类型 | 系列 完成度 | 待完善
座右铭 每一个伟大的事业,都有一个微不足道的开始。

一、前言、环境说明、预备知识  完成度:100%

a) 开发环境

操作系统:Windows10专业版 版本1903(OS内部版本18362.1016)
开发工具:Visual Studio Enterprise 2019 版本16.4.1
开发框架:ASP.NET Core 3.1
本文相关Nuget包:
Ocelot
Ocelot.Provider.Consul
Ocelot.Provider.Polly
Ocelot.Cache.CacheManager
Microsoft.VisualStudio.Web.CodeGeneration.Design
Microsoft.Extensions.Caching.Memory(可选:Ocelot缓存)
Microsoft.Extensions.Caching.Abstractions(可选:Ocelot缓存)
IdentityServer4.AccessTokenValidation(可选:集成IDS4专用)
MMLib.SwaggerForOcelot(可选:集成下游Swagger Restful API文档专用)

b) 程序包管理器控制台CLI

Install-Package Ocelot -Version 16.0.1
Install-Package Ocelot.Provider.Consul -Version 16.0.1
Install-Package Ocelot.Provider.Polly -Version 16.0.1
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 16.0.1
Install-Package Microsoft.Extensions.Caching.Memory -Version 3.1.6
Install-Package Microsoft.Extensions.Caching.Abstractions -Version 3.1.6
Install-Package IdentityServer4.AccessTokenValidation -Version 3.0.1
Install-Package MMLib.SwaggerForOcelot -Version 2.5.1

c) 预备知识

首先,要有.Net Core API项目的一些基础,并充分理解API网关。关于API网关,可以看下博主的这篇文章,相信可以得到不错的领悟。传送门
然后,光有了API网关的储备知识还是不够的,需要了解一下注册中心,.Neter一般都选用Consul,关于Consul的简单安装、使用,可以参考传送门,博主之后会继续写下Consul集群、配置、命令等。现在如果要研究的话,可以Google、Baidu一些资料。Ocelot一般要结合注册中心一起使用,可以实现动态拓展、服务发现等功能。

二、Ocelot基本使用  完成度:100%

a) 快速上手Ocelot

在理解了API网关之后,正式开干。快速集成主要分为几个步骤:
步骤1:网关是需要独立部署的,所以准备一个新的.Net Core3.1的WebAPI项目吧。然后上文的需要的Nuget包安装上。
步骤2:创建一个Json格式的配置文件,了解相关配置,使用相应功能。详细见下文"Ocelot基本配置"。
步骤3:配置Program.cs文件下的CreateHostBuilder方法,引入配置文件。详细见下文"Ocelot基本配置"。
步骤4:配置Startup.cs中的ConfigureServices()方法和Configure()方法,配置服务注册和中间件。详细见下文"Ocelot基本配置"。
步骤5:完成前面四步,一个最基本的Ocelot Gateway就搭建好了。

b) Ocelot基本配置

先配置Startup.cs文件。在ConfigureServices()方法中,添加代码:

services.AddOcelot().AddConsul().AddPolly();//此处是添加了Consul服务、Polly服务,如果不需要可以去掉。只需要AddOcelot()即可。

Configure()方法中,UseRouting()中间件之前,添加Ocelot中间件:

app.UseOcelot().Wait();

Startup.cs文件配置完成。现在在项目中添加一个json文件,暂且命名为"Ocelot_Config_Origin.json"。添加内容(注释是本博主加的,以便更好的学习之用):

//无Consul配置,简单配置,包含两大配置块,转发路由和全局配置
{
   
  // 转发路由,数组中的每个元素都是某个服务的一组路由转发规则
  "ReRoutes": [
    {
   
      // 下游(服务提供方)服务路由模板
      "DownstreamPathTemplate": "/api/{path}",
      // Uri方案,http、https
      "DownstreamScheme": "https",
      // 服务地址和端口,如果是集群就设置多个
      "DownstreamHostAndPorts": [
        {
   
          "Host": "localhost",
          "Port": 6001
        },
        {
   
          "Host": "localhost",
          "Port": 6002
        }
      ],
      // 允许的HTTP请求方法,可以写多个
      "UpstreamHttpMethod": [ "Get", "Post" ],
      // 上游(客户端,服务消费方)请求路由模板
      "UpstreamPathTemplate": "/OcelotNotes/{path}",
      // 负载均衡,只有上面匹配了集群,才有效
      /*
       负载均衡算法,总共三种类型。
        LeastConnection:最小链接,将请求发往最空闲的那个服务器
        RoundRobin:轮询,轮流发送
        NoLoadBalance:无负载均衡,总是发往第一个请求或者是服务发现
        */
      "LoadBalancerOptions": {
   
        "Type": "RoundRobin" // 轮询
      }
    },
    {
   
      // 下游(服务提供方)服务路由模板
      "DownstreamPathTemplate": "/api/{path}",
      // Uri方案,http、https
      "DownstreamScheme": "http",
      // 服务地址和端口,如果是集群就设置多个
      "DownstreamHostAndPorts": [
        {
   
          "Host": "localhost",
          "Port": 7001
        },
        {
   
          "Host": "localhost",
          "Port": 7002
        }
      ],
      // 允许的HTTP请求方法,可以写多个
      "UpstreamHttpMethod": [ "Get", "Post" ],
      // 上游(客户端,服务消费方)请求路由模板
      "UpstreamPathTemplate": "/MyServiceB/{path}",
      // 负载均衡,只有上面匹配了集群,才有效
      "LoadBalancerOptions": {
   
        "Type": "RoundRobin" // 轮询
      }
    }
  ],
  // 全局配置,此节点的配置会覆盖Routes,可以在这里设置一些通用的配置
  "GlobalConfiguration": {
   
    "ReRouteIsCaseSensitive": false// 路由是否区分大小写
  }
}

添加完毕后,我们先来简单看下这段Json。可见这些内容中可分为"GlobalConfiguration"和"Routes"两大部分(Ocelot的16.0.1版本是此名,旧版本Key为ReRoutes)。Routes中可包含多个对象,以供匹配不同的路由,转发到下游。在不结合注册中心的情况下,GlobalConfigurationRoutes中的配置并不一样。GlobalConfiguration中的配置较为简单,为公共的一些属性。Routes中的内容,比如负载均衡、访问方法限制,注释已经写得很详尽了,只说下路由模板这个地方:

  1. 路由模板分为UpstreamPathTemplate上游模板和DownstreamHttpMethod下游模板,类似于Nginx、DNS。路由访问网关模板路径,将被转发到相应微服务的下游模板中。
  2. 模板中的变量可以用"{}"符号包起来,如上述代码示例中,博主使用了{path}变量,即OcelotNotes后面的内容都当作变量转发到下游模板api下,当然可以多指定几个变量,改变顺序也是可以的。
  3. DownstreamHostAndPorts是配置微服务集群的,在不结合注册中心Consul的前提下,微服务集群每个进程的地址和端口都需要在这里写死。

Startup.cs文件和Json文件配置完成后,我们在Program.cs文件中,将配置好的Json文件加入到配置中。修改一下CreateHostBuilder()方法:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration(c =>
                {
   
                    c.AddJsonFile("Ocelot_Config_Origin.json", optional: false, reloadOnChange: true);
                })

             .ConfigureWebHostDefaults(webBuilder =>
                {
   
                    webBuilder.UseStartup<Startup>()</
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值