Ocelot一个优秀的.NET API网关框架
字数 1218 2025-08-15 21:33:21

Ocelot - .NET API网关框架详解

1. Ocelot概述

Ocelot是一个用.NET Core实现的开源API网关框架,具有以下核心功能:

  • 路由功能:将客户端请求路由到后端服务
  • 请求聚合:将多个请求合并为一个请求
  • 服务发现:与Consul等服务发现工具集成
  • 认证与鉴权:提供安全控制
  • 限流熔断:保护后端服务免受过载
  • 负载均衡:内置负载均衡器
  • 服务集成:支持Service Fabric、Butterfly Tracing等

2. 环境准备与安装

2.1 创建项目结构

  1. 创建两个WebApi项目:
    • WebApi01:作为网关项目(https://localhost:44313)
    • WebApi02:作为微服务API(https://localhost:44390)

2.2 安装必要包

在网关项目(WebApi01)中安装Ocelot:

dotnet add package Ocelot

注意:文档中使用的是17.0.0版本,不同版本配置可能有差异

3. 基本配置

3.1 Startup配置

Startup.cs中进行以下配置:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddSwaggerGen(c => 
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Autofac.WebApi", Version = "v1" });
    });
    
    // 添加Ocelot服务
    services.AddOcelot();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Ocelot.WebApi01 v1"));
    }

    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
    
    // 使用Ocelot中间件
    app.UseOcelot().Wait();
}

3.2 Program配置

Program.cs中添加Ocelot配置文件:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, builder) =>
        {
            // 添加ocelot.json配置文件
            builder.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

4. Ocelot配置文件详解

创建ocelot.json文件,包含路由和全局配置:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/{url}",          // 下游服务路由模板
      "DownstreamScheme": "https",                 // 下游服务协议(http/https)
      "DownstreamHostAndPorts": [                 // 下游服务地址和端口
        {
          "Host": "localhost",
          "Port": 44390
        }
      ],
      "UpstreamPathTemplate": "/api/{url}",       // 上游请求路由模板
      "UpstreamHttpMethod": [ "GET" ]            // 允许的HTTP方法
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "https://localhost:44313"         // 网关对外地址
  }
}

注意:16.1版本后将"ReRoutes"改为了"Routes"

5. 路由工作流程

根据上述配置,请求流程如下:

客户端请求:https://localhost:44313/api/WeatherForecast

将被路由到:https://localhost:44390/WeatherForecast

6. 测试验证

  1. 启动WebApi01(网关)和WebApi02(微服务)
  2. 访问网关端点:https://localhost:44313/api/WeatherForecast
  3. 验证请求是否被正确路由到https://localhost:44390/WeatherForecast

7. 进阶配置选项

Ocelot还支持以下高级配置:

  • 认证/鉴权:可集成IdentityServer等认证服务
  • 负载均衡:支持多种负载均衡算法
  • 服务质量:支持熔断、限流等机制
  • 服务发现:可与Consul、Eureka等服务发现工具集成
  • 请求转换:支持请求/响应内容的修改
  • 缓存:支持响应缓存

8. 版本注意事项

  • 不同版本的Ocelot可能有配置差异,需注意版本兼容性
  • 16.1版本是一个重要的变更点,将"ReRoutes"改为"Routes"
  • 建议查阅对应版本的官方文档获取准确配置信息

9. 最佳实践

  1. 将不同环境的配置文件分开(如ocelot.Development.json, ocelot.Production.json)
  2. 使用环境变量管理敏感信息
  3. 结合CI/CD实现配置的自动化部署
  4. 监控网关性能指标和错误日志
  5. 实施适当的限流策略保护后端服务
Ocelot - .NET API网关框架详解 1. Ocelot概述 Ocelot是一个用.NET Core实现的开源API网关框架,具有以下核心功能: 路由功能:将客户端请求路由到后端服务 请求聚合:将多个请求合并为一个请求 服务发现:与Consul等服务发现工具集成 认证与鉴权:提供安全控制 限流熔断:保护后端服务免受过载 负载均衡:内置负载均衡器 服务集成:支持Service Fabric、Butterfly Tracing等 2. 环境准备与安装 2.1 创建项目结构 创建两个WebApi项目: WebApi01:作为网关项目(https://localhost:44313) WebApi02:作为微服务API(https://localhost:44390) 2.2 安装必要包 在网关项目(WebApi01)中安装Ocelot: 注意:文档中使用的是17.0.0版本,不同版本配置可能有差异 3. 基本配置 3.1 Startup配置 在 Startup.cs 中进行以下配置: 3.2 Program配置 在 Program.cs 中添加Ocelot配置文件: 4. Ocelot配置文件详解 创建 ocelot.json 文件,包含路由和全局配置: 注意:16.1版本后将"ReRoutes"改为了"Routes" 5. 路由工作流程 根据上述配置,请求流程如下: 客户端请求: https://localhost:44313/api/WeatherForecast 将被路由到: https://localhost:44390/WeatherForecast 6. 测试验证 启动WebApi01(网关)和WebApi02(微服务) 访问网关端点: https://localhost:44313/api/WeatherForecast 验证请求是否被正确路由到 https://localhost:44390/WeatherForecast 7. 进阶配置选项 Ocelot还支持以下高级配置: 认证/鉴权 :可集成IdentityServer等认证服务 负载均衡 :支持多种负载均衡算法 服务质量 :支持熔断、限流等机制 服务发现 :可与Consul、Eureka等服务发现工具集成 请求转换 :支持请求/响应内容的修改 缓存 :支持响应缓存 8. 版本注意事项 不同版本的Ocelot可能有配置差异,需注意版本兼容性 16.1版本是一个重要的变更点,将"ReRoutes"改为"Routes" 建议查阅对应版本的官方文档获取准确配置信息 9. 最佳实践 将不同环境的配置文件分开(如ocelot.Development.json, ocelot.Production.json) 使用环境变量管理敏感信息 结合CI/CD实现配置的自动化部署 监控网关性能指标和错误日志 实施适当的限流策略保护后端服务