40.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--初始化网关

在第二部分我们用了多篇文章详细讲解了网关以及.NET中的Ocelot网关的相关知识。那么,从这篇文章起我们将在孢子记账项目中集成Ocelot网关。这一篇我们先来初始化网关。

一、为什么要引入网关

在孢子记账项目中引入网关,是实现微服务架构的重要一步。网关作为系统的前置入口,能够有效地简化客户端与后端服务之间的交互流程。通过网关,所有的外部请求都可以统一接入,无需让客户端直接与各个微服务通信,这不仅提升了系统的安全性,还便于后续的维护和扩展。网关能够根据不同的请求路径和方法,将流量智能地路由到对应的微服务,实现灵活的流量分发和负载均衡,从而提升系统的可用性和性能。此外,网关还可以集成安全认证机制,对所有进入系统的请求进行统一的身份校验和权限控制,保护微服务免受未授权访问的威胁。对于需要聚合多个微服务数据的场景,网关能够将多个后端请求合并为一次响应,减少客户端的调用次数,提升用户体验。同时,网关还便于集成监控、日志记录等功能,帮助开发和运维团队实时掌握系统运行状况,快速定位和解决问题。最后,网关还可以统一管理和展示 API 文档,方便开发者查阅和调用各项服务接口。综上所述,网关不仅提升了系统的整体架构质量,也为后续的功能扩展和运维管理打下了坚实的基础。

根据前面所描述的,我们在孢子记账项目中引入网关,要在后面的文章一步步实现这些目标:

  1. 统一入口:通过网关作为所有外部请求的统一入口,简化客户端与后端服务的交互流程。
  2. 路由与负载均衡:根据请求路径和方法,将流量智能地路由到对应的微服务,实现灵活的流量分发和负载均衡。
  3. 安全认证:集成统一的身份认证和权限控制机制,保护微服务免受未授权访问的威胁。
  4. 请求聚合:将多个后端服务的响应合并为一次响应,减少客户端的调用次数,提升用户体验。
  5. 监控与日志:集成监控和日志记录功能,帮助实时掌握系统运行状况,快速定位和解决问题。
  6. API 管理:统一管理和展示 API 文档,方便开发者查阅和调用各项服务接口。

二、创建网关项目

在孢子记账项目中,我们将创建一个新的项目作为网关。这个项目将使用 Ocelot 框架来实现网关的功能。首先,在解决方案中添加一个新的 ASP.NET Core Web API 项目,命名为 SP.Gateway。创建完成后,我们需要在项目中安装 Ocelot 的 NuGet 包。可以通过 NuGet 包管理器控制台执行以下命令:

dotnet add package Ocelot
dotnet add package Ocelot.Provider.Nacos

安装的第一个包是 Ocelot 的核心功能包,第二个包是 Ocelot 的 Nacos 服务发现提供者,这样我们就可以在网关中使用 Nacos 进行服务注册和发现。我们在创建的 SP.Gateway 项目中配置 Ocelot 的相关设置。在很多教程中都是将 Ocelot 的配置作为json文件放在微服务的根目录下,但是这样并不是最佳实践。我们将Ocelot的配置放在nacos中,这样可以更好地实现服务的动态配置和管理。在Naocs中新建名为ocelot.json的配置项,并在其中添加 Ocelot 的路由配置。以下是一个简单的示例配置:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/{everything}",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/identity/{everything}",
      "UpstreamHttpMethod": ["GET", "POST", "PUT", "DELETE", "PATCH"],
      "ServiceName": "SPIdentityService",
      "UseServiceDiscovery": true,
      "LoadBalancerOptions": { "Type": "RoundRobin" }
    },
    {
      "DownstreamPathTemplate": "/{everything}",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/config/{everything}",
      "UpstreamHttpMethod": ["GET", "POST", "PUT", "DELETE", "PATCH"],
      "ServiceName": "SPConfigService",
      "UseServiceDiscovery": true,
      "LoadBalancerOptions": { "Type": "RoundRobin" }
    },
    {
      "DownstreamPathTemplate": "/{everything}",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/currency/{everything}",
      "UpstreamHttpMethod": ["GET", "POST", "PUT", "DELETE", "PATCH"],
      "ServiceName": "SPCurrencyService",
      "UseServiceDiscovery": true,
      "LoadBalancerOptions": { "Type": "RoundRobin" }
    },
    {
      "DownstreamPathTemplate": "/{everything}",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/finance/{everything}",
      "UpstreamHttpMethod": ["GET", "POST", "PUT", "DELETE", "PATCH"],
      "ServiceName": "SPFinanceService",
      "UseServiceDiscovery": true,
      "LoadBalancerOptions": { "Type": "RoundRobin" }
    },
    {
      "DownstreamPathTemplate": "/{everything}",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/report/{everything}",
      "UpstreamHttpMethod": ["GET", "POST", "PUT", "DELETE", "PATCH"],
      "ServiceName": "SPReportService",
      "UseServiceDiscovery": true,
      "LoadBalancerOptions": { "Type": "RoundRobin" }
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:8977",
    "ServiceDiscoveryProvider": {
      "Type": "Nacos",
      "ServerAddresses": ["http://14.103.224.141:8848"],
      "Namespace": "fa420303-2c1c-4b51-a581-ca7210963549",
      "GroupName": "DEFAULT_GROUP",
      "Username": "SP_ADMIN",
      "Password": "123*asdasd"
    }
  }
}

在上面的配置中,我们定义了多个路由,每个路由对应一个微服务。DownstreamPathTemplate 指定了下游服务的路径模板,DownstreamScheme 指定了下游服务使用的协议(http或https),UpstreamPathTemplate 则指定了上游路径模板,即客户端请求的路径。ServiceName 是注册到 Nacos 的服务名称,UseServiceDiscovery 表示是否使用服务发现,LoadBalancerOptions 配置了负载均衡策略。

最后,我们需要在 Program.cs 文件中配置 Ocelot。打开 Program.cs 文件,添加以下代码:

// more code ...

// Ocelot + Nacos 服务发现
builder.Services.AddOcelot(builder.Configuration).AddNacosDiscovery();

// more code ...

// 启用 Ocelot 作为网关
await app.UseOcelot();

// more code ...

这样就完成了 Ocelot 网关的基本配置。接下来,我们可以启动网关项目,并通过浏览器或 Postman 测试网关是否能够正确转发请求到各个微服务。

Tip: 在这里我们只展示了与Ocelot相关的配置,其他的配置请参考孢子记账项目的完整代码。

三、总结

在本篇文章中,我们介绍了为什么要在孢子记账项目中引入网关,并创建了一个新的 ASP.NET Core Web API 项目作为网关。我们使用 Ocelot 框架来实现网关的功能,并将 Ocelot 的配置放在 Nacos 中,以便于动态配置和管理。通过这些步骤,我们为后续的微服务架构打下了坚实的基础。在接下来的文章中,我们将继续深入学习 Ocelot 网关的各项功能,包括路由、负载均衡、安全认证等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵叔哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值