当前位置: 首页 > 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.lryc.cn/news/615830.html

相关文章:

  • 【递归、搜索与回溯算法】递归算法
  • 【前端基础】14、CSS设置背景(background相关的)
  • Unity中实现自动寻路
  • 串口通信初始化过程是怎样的???
  • 每日五个pyecharts可视化图表-line:从入门到精通 (2)
  • go语言运算符
  • H3C(基于Comware操作系统)与eNSP平台(模拟华为VRP操作系统)的命令差异
  • GPT OSS深度解析:OpenAI时隔6年的开源模型,AI民主化的新里程碑?
  • 【递归、搜索与回溯算法】深度优先搜索
  • python Flask简单图书管理 API
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现
  • Lua基础+Lua数据类型
  • Hadoop MapReduce过程
  • nginx+Lua环境集成、nginx+Lua应用
  • 分享一个基于Python和Hadoop的的电信客户特征可视化分析平台 基于Spark平台的电信客服数据存储与处理系统源码
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘mlflow’问题
  • leetcode2379:得到K个黑块的最少涂色次数(定长滑动窗口)
  • Boost.Asio io_service 与 线程 的分析
  • 字节:计算机存储单位
  • 算术运算符指南
  • 企业级WEB应用服务器TOMCAT — WEB技术详细部署
  • 使用Blender可视化多传感器坐标系转换
  • 从onnx模型到om模型的全自动化转化
  • 2025年APP开发趋势:4大方向重构行业格局
  • 【lucene】BlockDocsEnum 跟BlockImpactsDocsEnum 的区别
  • LeetCode 869.重新排序得到 2 的幂:哈希表+排序(一次初始化)
  • Java设计模式之开闭原则介绍与说明
  • 深入解析Go设计模式:命令模式实战
  • 分布微服务电商订单系统Rust编码开发[上]
  • Rust进阶-part6-宏