掌握 .NET Core 8/9中的微服务:实现 Ocelot API 网关

科技   2024-11-25 16:48   上海  


掌握 .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

  1. **创建新解决方案:**打开终端并运行以下命令,为微服务创建一个新解决方案和两个项目:

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 网关,以将请求路由到微服务。

  1. **创建 API Gateway 项目:**使用以下命令将新的 API Gateway 项目添加到解决方案中:

dotnet new webapi -n APIGateway

**2. 安装 Ocelot:**在项目中,从 NuGet 安装 Ocelot:APIGateway

dotnet add package Ocelot

Ocelot 将充当反向代理,将请求路由到相应的下游服务 ( 和 )。ProductServiceOrderService

第 4 步:配置 Ocelot 以进行路由

现在,配置 Ocelot 以处理请求并将其路由到微服务。

  1. **创建 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 中间件。

  1. 修改 以使用 Ocelot:Program.cs

  2. 在工程文件中,添加以下代码,配置 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 身份验证

  1. **配置 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 可以处理同一微服务的多个实例之间的负载均衡。它还支持断路器,这有助于正常管理故障。

  1. **配置负载均衡:**修改 以在微服务的多个实例之间分配请求:ocelot.json

{  
"DownstreamHostAndPorts": [
{ "Host": "localhost", "Port": 5001 },
{ "Host": "localhost", "Port": 5003 }
],
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
}

**2.启用断路器:**要防止级联失败:

"QoSOptions": {  
"ExceptionsAllowedBeforeBreaking": 3,
"DurationOfBreak": 1000,
"TimeoutValue": 5000
}

故障排除提示

  1. 常见问题:API Gateway 未正确路由请求。

  • 解决方案:检查文件以确保下游服务在正确的端口和路径上运行。ocelot.json

2. 常见问题:JWT 鉴权失败。

  • 解决方案:确保 JWT 令牌已正确配置,并且受众和权限值与您的身份验证服务器匹配。

在 .NET Core 微服务体系结构中使用 Ocelot API 网关有助于简化路由、安全性和流量管理的复杂性。

如果你喜欢我的文章,请给我一个赞!谢谢

架构师老卢
资深软件架构师, 分享编程、软件设计经验, 教授前沿技术, 分享技术资源(每天发布电子书),每天进步一点点...
 最新文章