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 创建项目结构
- 创建两个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. 测试验证
- 启动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实现配置的自动化部署
- 监控网关性能指标和错误日志
- 实施适当的限流策略保护后端服务