当前位置: 首页 > news >正文

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 网关的各项功能,包括路由、负载均衡、安全认证等。

http://www.xdnf.cn/news/1275769.html

相关文章:

  • Pytorch进阶-timm库-00快速开始
  • (三)全栈(部署)
  • 精准计算Word文档页数的PHP类
  • 数据结构-deque(双端队列)和queue(队列)区别
  • 【npm、yarn、pnpm】特点对比,按需选择
  • Java 后端性能优化实战:从 SQL 到 JVM 调优
  • 分布微服务电商订单系统Rust编码开发[上]
  • 数组练习(一)
  • vuhub drippingblues靶场攻略
  • #4:MinIO分片上传和集群部署
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DHCP欺骗、DHCP饿死)
  • 安全运维的核心
  • C语言——深入理解指针(二)
  • 【递归、搜索与回溯算法】递归算法
  • Ollama+Deepseek+Docker+RAGFlow打造自己的私人AI知识库
  • 计算机网络:超网即路由聚合一定需要连续的IP地址吗?
  • 秋招春招实习百度笔试百度管培生笔试题库百度非技术岗笔试|笔试解析和攻略|题库分享
  • RabbitMQ面试精讲 Day 19:网络调优与连接池管理
  • Spring Boot 注解详解:@RequestMapping 的多种用法
  • 十、Linux Shell脚本:流程控制语句
  • Day41--动态规划--121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II,123. 买卖股票的最佳时机 III
  • 网闸技术解析:如何实现对国产数据库(达梦/金仓)的深度支持
  • 我如何从安全运维逆袭成企业CSO
  • WiFi原理与WiFi安全
  • 【软考中级网络工程师】知识点之 IPv6 全解析
  • 基于python高校固定资产管理系统
  • 【在线五子棋对战】十二、http请求处理
  • 【经典算法】二叉树最小深度详解:递归解法与可视化分析
  • 【自用】JavaSE--IO流(二)--缓冲流、转换流、打印流、数据流、序列化流、IO框架
  • Redis 数据类型和单线程模型补充