Ocelot API网关入门指南:快速搭建.NET微服务网关
Ocelot 项目地址: https://gitcode.com/gh_mirrors/oce/Ocelot
什么是Ocelot?
Ocelot是一个基于.NET平台构建的轻量级API网关,专为微服务架构设计。它充当客户端和后端服务之间的中介,提供路由、请求聚合、认证授权、负载均衡等功能。Ocelot特别适合在ASP.NET Core环境中使用,支持.NET 6.0、7.0和8.0框架。
环境准备
在开始使用Ocelot前,你需要确保已安装:
- .NET 8.0 SDK(也兼容6.0和7.0)
- 开发工具(如Visual Studio或VS Code)
- 基本的ASP.NET Core Web API项目
安装Ocelot
通过NuGet包管理器安装Ocelot核心包:
Install-Package Ocelot
这个命令会自动安装Ocelot及其所有依赖项。建议在ASP.NET Core最小API项目中集成Ocelot。
基础配置
Ocelot的核心配置通过ocelot.json
文件实现。下面是一个最简单的配置示例:
{
"Routes": [],
"GlobalConfiguration": {
"BaseUrl": "https://api.mybusiness.com"
}
}
这个配置虽然不会实际路由任何请求,但能让Ocelot正常启动。其中BaseUrl
属性非常重要,它指定了客户端访问Ocelot的外部URL。
实际路由示例
下面是一个实际可用的配置示例,它将请求路由到JSONPlaceholder API:
{
"Routes": [
{
"DownstreamPathTemplate": "/todos/{id}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "jsonplaceholder.typicode.com",
"Port": 443
}
],
"UpstreamPathTemplate": "/todos/{id}",
"UpstreamHttpMethod": ["Get"]
}
],
"GlobalConfiguration": {
"BaseUrl": "https://localhost:5000"
}
}
在这个配置中:
Downstream
相关配置指向目标服务Upstream
相关配置定义客户端如何访问BaseUrl
是Ocelot对外暴露的地址
程序集成
在ASP.NET Core项目中,需要在Program.cs
中配置Ocelot:
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
namespace OcelotBasic
{
public class Program
{
public static void Main(string[] args)
{
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
config
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
.AddJsonFile("ocelot.json")
.AddEnvironmentVariables();
})
.ConfigureServices(s => {
s.AddOcelot();
})
.ConfigureLogging((hostingContext, logging) =>
{
// 配置日志记录
})
.UseIISIntegration()
.Configure(app =>
{
app.UseOcelot().Wait();
})
.Build()
.Run();
}
}
}
关键点说明:
AddOcelot()
方法注册了Ocelot所需的所有默认服务UseOcelot().Wait()
添加了Ocelot中间件到请求处理管道- 配置系统会加载
ocelot.json
文件
容器化部署注意事项
在容器化环境中部署Ocelot时,需要特别注意BaseUrl
的配置:
- 如果Ocelot前面有反向代理(如Nginx),
BaseUrl
应该是客户端看到的地址 - 直接暴露Ocelot容器时,
BaseUrl
应该是容器的实际地址 - 在多实例部署时,可以通过命令行参数动态设置
BaseUrl
下一步
完成基础配置后,你可以进一步探索Ocelot的高级功能:
- 复杂的路由规则配置
- 请求聚合
- 服务发现集成
- 认证授权机制
- 限流和熔断
Ocelot的强大之处在于它的灵活性和可扩展性,通过合理的配置可以构建出适合各种场景的API网关解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考