掌握 .NET Core 8/9 中的微服务:实现 Ocelot API 网关的分步指南
微服务架构已成为构建可扩展、灵活且可维护的系统的一种流行方法。它允许组织开发和部署独立的服务,每个服务都处理特定的业务功能。但是,管理多项服务会带来路由、安全性和流量管理等挑战。这就是 API 网关发挥关键作用的地方。
在本文中,我将向您介绍如何使用 .NET Core 8 中的 Ocelot API 网关实现微服务。在本教程结束时,您将了解如何配置 Ocelot 以进行路由、负载均衡和身份验证,并逐步实施基本的微服务架构。
您将学到什么:
什么是微服务和 API 网关。
为什么 Ocelot 是在 .NET Core 8 中管理微服务的理想选择。
使用 Ocelot API Gateway 配置微服务的分步说明。
路由、身份验证和负载均衡等关键概念。
故障排除提示和实际使用案例。
先决条件:
要按照本教程进行操作,您需要满足以下条件:
了解 C# 和 .NET Core 的基本知识。
计算机上安装了 .NET Core 8 SDK。
一个 IDE,例如 Visual Studio 或 Visual Studio Code。
Postman 或任何 API 测试工具。
Docker 的基本知识(可选,但对于在容器中运行服务很有用)。
第 1 步:什么是微服务和 API 网关?
微服务:
微服务架构将应用程序分解为小型、独立的服务,这些服务可以单独部署和管理。每个微服务都旨在处理特定的业务功能。这种模块化方法提高了可扩展性、敏捷性和容错能力。
API 网关:
API Gateway 充当多个微服务的单个入口点。它处理路由、安全性、负载平衡、监控和其他横切关注点。API Gateway 抽象化了各个服务的复杂性,使客户端能够更轻松地使用 API。
为什么选择适用于 .NET Core 的 Ocelot?
Ocelot 是专为 .NET 应用程序构建的轻量级且功能强大的 API 网关框架。它通过提供路由、请求聚合、身份验证、速率限制和其他基本功能来简化微服务管理。使用 Ocelot,您可以在 .NET Core 应用程序中高效管理多个微服务。
步骤 2:在 .NET Core 8 中设置微服务
让我们从创建两个微服务开始:和 .这些微服务将充当公开 API 的独立服务。ProductServiceOrderService
**创建新解决方案:**打开终端并运行以下命令,为微服务创建一个新解决方案和两个项目:
dotnet new sln -n MicroservicesWithOcelot
cd MicroservicesWithOcelot
dotnet new webapi -n ProductService
dotnet new webapi -n OrderService
2. 配置每个微服务:
对于 ,请创建一个简单的 API 端点,如 .ProductService/api/productsProductController
同样,在OrderService/api/ordersOrderController
每个服务都应该独立运行并公开自己的 API 集,这些 API 稍后将通过 API Gateway 进行路由。
第 3 步:添加 Ocelot API 网关
接下来,使用 Ocelot 创建 API 网关,以将请求路由到微服务。
**创建 API Gateway 项目:**使用以下命令将新的 API Gateway 项目添加到解决方案中:
dotnet new webapi -n APIGateway
**2. 安装 Ocelot:**在项目中,从 NuGet 安装 Ocelot:APIGateway
dotnet add package Ocelot
Ocelot 将充当反向代理,将请求路由到相应的下游服务 ( 和 )。ProductServiceOrderService
第 4 步:配置 Ocelot 以进行路由
现在,配置 Ocelot 以处理请求并将其路由到微服务。
**创建 Ocelot 配置文件:**在项目中,创建一个名为 的文件。此文件定义将传入请求映射到下游服务的路由规则。APIGatewayocelot.json
示例 :ocelot.json
{
"Routes": [
{
"DownstreamPathTemplate": "/api/products",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/gateway/products",
"UpstreamHttpMethod": [ "GET" ]
},
{
"DownstreamPathTemplate": "/api/orders",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5002
}
],
"UpstreamPathTemplate": "/gateway/orders",
"UpstreamHttpMethod": [ "GET" ]
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:5000"
}
}
DownstreamPathTemplate:定义微服务的路径。
UpstreamPathTemplate:指定客户端将用于访问 API Gateway 的路径。
DownstreamHostAndPorts:配置运行微服务的主机和端口。
步骤 5:在 .NET Core 中注册 Ocelot 中间件
要启用 Ocelot 路由,您需要在 API Gateway 中注册 Ocelot 中间件。
修改 以使用 Ocelot:Program.cs
在工程文件中,添加以下代码,配置 Ocelot 中间件:Program.csAPIGateway
var builder = WebApplication.CreateBuilder(args);
// Add Ocelot configuration
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
builder.Services.AddOcelot();
var app = builder.Build();
// Use Ocelot middleware
app.UseOcelot().Wait();
app.Run();
**2. 构建并运行:**在不同的端口上运行所有项目(ProductService、OrderService 和 APIGateway)。例如:
ProductService: http://localhost:5001
OrderService: http://localhost:5002
APIGateway: http://localhost:5000
第 6 步:测试 API 网关
现在,服务和网关已设置完毕,请使用 Postman 或 curl 测试 API 网关。
ProductService 端点测试:
GET http://localhost:5000/gateway/products
.OrderService 端点测试:
GET http://localhost:5000/gateway/orders
第 7 步:使用 JWT 身份验证保护 API 网关
向 API Gateway 添加身份验证可确保只有授权用户才能访问微服务。Ocelot 支持开箱即用的 JWT Bearer 身份验证。
**配置 JWT 身份验证:**将以下内容添加到您的 YOUR 中以配置身份验证:ocelot.json
{
"Routes": [
{
"DownstreamPathTemplate": "/api/products",
"AuthenticationOptions": {
"AuthenticationProviderKey": "AuthKey"
},
"UpstreamPathTemplate": "/gateway/products",
"UpstreamHttpMethod": [ "GET" ]
}
]
}
2. 在 中注册身份验证 :Program.cs
builder.Services.AddAuthentication("AuthKey")
.AddJwtBearer("AuthKey", options =>
{
options.Authority = "https://your-auth-provider";
options.Audience = "your-api";
});
步骤 8:实施负载均衡和断路器
Ocelot 可以处理同一微服务的多个实例之间的负载均衡。它还支持断路器,这有助于正常管理故障。
**配置负载均衡:**修改 以在微服务的多个实例之间分配请求:ocelot.json
{
"DownstreamHostAndPorts": [
{ "Host": "localhost", "Port": 5001 },
{ "Host": "localhost", "Port": 5003 }
],
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
}
**2.启用断路器:**要防止级联失败:
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 3,
"DurationOfBreak": 1000,
"TimeoutValue": 5000
}
故障排除提示
常见问题:API Gateway 未正确路由请求。
解决方案:检查文件以确保下游服务在正确的端口和路径上运行。ocelot.json
2. 常见问题:JWT 鉴权失败。
解决方案:确保 JWT 令牌已正确配置,并且受众和权限值与您的身份验证服务器匹配。
在 .NET Core 微服务体系结构中使用 Ocelot API 网关有助于简化路由、安全性和流量管理的复杂性。
如果你喜欢我的文章,请给我一个赞!谢谢