在微服务架构日益普及的今天,如何有效地管理服务配置、实现智能路由和保障系统稳定性成为关键问题。本文将详细介绍一个基于Spring Cloud Alibaba的完整微服务小案例,全方位讲解Nacos、Gateway和Sentinel在项目中的集成与应用(源码在最后)。

项目概述

本项目是一个典型的电商微服务系统,采用Spring Boot 2.6.11和Spring Cloud 2021.0.4构建,通过Spring Cloud Alibaba 2021.0.4.0集成以下核心组件:

  • Nacos:配置中心和服务发现
  • Gateway:API网关和路由管理
  • Sentinel:流量控制和系统保护

项目包含以下核心模块:

  • 网关服务(gateway):负责请求路由、负载均衡和流量控制
  • 订单服务(order):处理订单相关业务逻辑
  • 产品服务(product):管理商品信息
  • 用户服务(user):处理用户相关功能

微服务项目结构图

shop-parent (根项目)
├── shop-api-gateway (网关服务)
│   ├── src/main/java
│   │   └── com.example
│   │       ├── config (网关配置)
│   │       ├── filter (过滤器)
│   │       └── GatewayApp.java (启动类)
│   ├── src/main/resources
│   │   ├── application.yml (应用配置)
│   │   └── bootstrap.yml (引导配置)
│   └── pom.xml
│
├── shop-product-api (产品API)
│   ├── src/main/java
│   │   └── com.example.entity
│   │       └── TShopProduct.java (产品实体)
│   └── pom.xml
│
├── shop-product-server (产品服务)
│   ├── src/main/java
│   │   └── com.example
│   │       ├── controller (控制器)
│   │       ├── mapper (数据访问)
│   │       ├── service (业务逻辑)
│   │       └── ProductApp.java (启动类)
│   ├── src/main/resources
│   │   ├── application.yml (应用配置)
│   │   └── bootstrap.yml (引导配置)
│   └── pom.xml
│
├── shop-order-api (订单API)
│   ├── src/main/java
│   │   └── com.example.entity
│   │       └── TShopOrder.java (订单实体)
│   └── pom.xml
│
├── shop-order-server (订单服务)
│   ├── src/main/java
│   │   └── com.example
│   │       ├── advice (异常处理)
│   │       ├── controller (控制器)
│   │       ├── feign (服务调用)
│   │       ├── handler (处理器)
│   │       ├── mapper (数据访问)
│   │       ├── parser (解析器)
│   │       ├── service (业务逻辑)
│   │       └── OrderApp.java (启动类)
│   ├── src/main/resources
│   │   ├── application.yml (应用配置)
│   │   └── bootstrap.yml (引导配置)
│   └── pom.xml
│
├── shop-user-api (用户API)
│   ├── src/main/java
│   │   └── com.example.entity
│   │       └── TShopUser.java (用户实体)
│   └── pom.xml
│
└── shop-user-server (用户服务)
    ├── src/main/java
    │   └── com.example
    │       ├── controller (控制器)
    │       ├── mapper (数据访问)
    │       ├── service (业务逻辑)
    │       └── UserApp.java (启动类)
    ├── src/main/resources
    │   ├── application.yml (应用配置)
    │   └── bootstrap.yml (引导配置)
    └── pom.xml

数据库表

已上传至gitee项目代码文件中,自行添加到数据库中即可

技术栈

  • Spring Boot 2.6.11
  • Spring Cloud 2021.0.4
  • Spring Cloud Alibaba 2021.0.4.0
  • Nacos 2.2.3(单机模式)
  • Sentinel 1.8.3
  • Gateway(Spring Cloud Gateway)
  • Maven 3.8+

Nacos集成详解

配置中心功能

所有微服务通过Nacos实现配置的统一管理。每个服务在启动时从Nacos配置中心加载自己的配置文件,支持配置的动态刷新功能。
在这里插入图片描述

服务发现功能

微服务启动时自动向Nacos注册自己的服务信息,包括服务名称、IP地址和端口等。其他服务可以通过服务名称发现并调用该服务。
在这里插入图片描述

共享配置功能

订单服务通过共享配置功能引入全局配置,多个服务可以共享通用配置项,如全局开关、通用参数等。
在这里插入图片描述
在这里插入图片描述

Gateway网关集成

路由功能

网关服务通过配置实现智能路由,将不同路径的请求转发到对应的服务。例如:

  • /p/**路径的请求转发到产品服务
  • /o/**路径的请求转发到订单服务

负载均衡

网关集成Ribbon实现负载均衡,能够自动在多个服务实例间分发请求。
在这里插入图片描述

Sentinel流量控制集成

流量控制

通过Sentinel实现流量控制,防止系统因突发大流量而崩溃。可以针对不同的资源设置不同的流控规则。

熔断降级

当某个服务出现异常时,Sentinel可以自动熔断对该服务的调用,避免故障扩散,并在适当时机尝试恢复。

系统自适应保护

Sentinel能够根据系统的实时负载情况,自动调整流量控制策略,保护系统稳定运行。

测试路径
http://localhost:9000/o/order/save/1/1/2?token=12
http://localhost:9000/p/product/get/1?token=12
http://localhost:8092/user/get/1
http://localhost:8091/showtitle

在这里插入图片描述

核心功能亮点

动态配置刷新

通过Nacos配置中心,项目支持配置的动态刷新功能。当配置发生变化时,服务能够实时获取最新配置,无需重启服务。(建议先在idea中编写application.yml,然后粘贴到Nacos配置中,然后将application注释即可)
在这里插入图片描述
以gateway-dev.yml为例
在这里插入图片描述
在这里插入图片描述

服务自动发现

服务启动时自动注册到Nacos,其他服务可以自动发现并调用,无需硬编码服务地址。

熔断降级机制

通过Sentinel实现服务间的熔断降级,提高系统的容错能力和稳定性。

项目部署架构

项目采用单机部署模式,适用于开发和测试环境:

  • Nacos作为配置中心和服务发现组件
  • Gateway作为统一入口和路由转发
  • 各业务服务独立部署
  • Sentinel提供流量控制和系统保护

运行效果展示

  1. 各微服务成功注册到Nacos,可在Nacos控制台的服务列表中查看
  2. 通过网关可以访问各微服务接口,实现自动路由
  3. Sentinel控制台可以监控流量并实施流控规则
  4. 修改Nacos中的配置后,服务能实时获取最新配置值
  1. Nacos服务列表页面
    在这里插入图片描述
  2. 网关路由访问效果
    在这里插入图片描述> 3. Sentinel控制台实时监控在这里插入图片描述
  3. 配置刷新前后对比
    注:绿色为新加,红色为修改或删除
    在这里插入图片描述
    在这里插入图片描述
    发布之后直接刷新shoutitle页面
    在这里插入图片描述

最佳实践总结

Nacos使用建议

  1. 合理规划命名空间和分组,实现环境隔离
  2. 使用共享配置减少重复配置项
  3. 启用配置版本管理,便于回滚

Gateway使用建议

  1. 合理设计路由规则,避免路径冲突
  2. 配置合适的超时时间和重试机制
  3. 启用访问日志,便于问题排查

Sentinel使用建议

  1. 根据业务特点设置合理的流控规则
  2. 配置完善的降级处理逻辑
  3. 监控关键业务指标,及时调整策略

总结

通过本项目的实践,我们成功地将Nacos、Gateway和Sentinel集成到微服务架构中,实现了配置管理、服务发现、智能路由、流量控制等核心功能。这些组件的协同工作大大提升了微服务架构的可维护性、可扩展性和稳定性。
本项目采用单机部署模式,适用于开发和测试环境。在生产环境中,可以根据需要部署集群以提高可用性。通过合理使用这些技术组件,可以显著提升开发效率和系统稳定性,为构建高可用的微服务系统奠定了坚实基础。

源码获取

完整的项目源码已上传至gitee,欢迎下载和交流学习。


如果您觉得这篇文章对您有帮助,请点赞关注,我会持续分享更多实用的技术文章。如有任何问题,欢迎在评论区留言讨论。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐