简单介绍Spring Cloud Alibaba 微服务项目的开发流程

【微服务项目】Spring Cloud Alibaba 实战 Spring Cloud Alibaba 实战 阅读详情

简单介绍Spring Cloud Alibaba 微服务项目的开发流程

项目概述

本项目是一个基于 Spring Cloud Alibaba 技术栈构建的微服务架构示例项目,实现了简历自动投递系统的核心功能。项目采用 Nacos 作为服务注册与配置中心,Dubbo 作为 RPC 框架,Sentinel 实现服务熔断与限流。

技术栈

核心框架

  • JDK: 17
  • Spring Boot: 2.7.6
  • Spring Cloud: 2021.0.9
  • Spring Cloud Alibaba: 2.2.9.RELEASE

微服务组件

  • Nacos: 服务注册与发现、配置中心(集群模式:8848, 8850, 8852)
  • Dubbo: 3.2.11 - 高性能 RPC 框架
  • Sentinel: 1.8.6 - 流量控制、熔断降级
  • MySQL: 数据持久化
  • Spring Data JPA: ORM 框架

其他依赖

  • Lombok: 简化 Java 代码
  • Spring Boot Actuator: 应用监控
  • JAXB: JDK 17 兼容性依赖

项目结构

weh-resume-nacos/
├── weh-service-common/              # 公共模块
│   └── src/main/java/com/weh/resume/pojo/
│       ├── Result.java              # 统一返回结果封装
│       └── Resume.java              # 简历实体类
├── weh-service-dubbo-api/           # Dubbo 服务接口定义
│   └── src/main/java/com/weh/resume/service/
│       └── ResumeService.java       # 简历服务接口
├── weh-service-resume-8081/         # 简历服务提供者(实例1)
│   └── src/main/java/com/weh/resume/
│       ├── dao/ResumeDao.java       # 数据访问层
│       ├── service/impl/            # 服务实现
│       └── ServiceResumeApplication8081.java
├── weh-service-resume-8082/         # 简历服务提供者(实例2)
│   └── src/main/java/com/weh/resume/
│       ├── dao/ResumeDao.java
│       ├── service/impl/
│       └── ServiceResumeApplication8082.java
└── weh-service-autodeliver-8090/    # 自动投递服务消费者
    └── src/main/java/com/weh/resume/
        ├── controller/              # 控制器层
        │   ├── AutodeliverController.java
        │   ├── ConfigTestController.java
        │   └── UserController.java
        ├── config/
        │   └── SentinelHandlerClass.java  # Sentinel 异常处理
        ├── enums/
        │   └── StatusCodeEnum.java       # 状态码枚举
        ├── exception/
        │   ├── ControllerAdviceHandler.java
        │   └── MyCustomException.java
        └── AutodeliverApplication8090.java

模块说明

1. weh-service-common(公共模块)

职责: 提供公共实体类和工具类

核心类:

  • Result<T>: 统一返回结果封装类
    // 成功响应
    Result.success(data)
    Result.success("操作成功", data)
    
    // 失败响应
    Result.error("操作失败")
    Result.error(500, "系统错误")
    

2. weh-service-dubbo-api(服务接口模块)

职责: 定义 Dubbo 服务接口,供服务提供者和消费者依赖

核心接口:

  • ResumeService: 简历服务接口
    Integer findDefaultResumeByUserId(Long userId);
    

3. weh-service-resume-8081/8082(简历服务提供者)

职责: 提供简历数据服务,实现 Dubbo 服务接口

配置要点:

  • 端口: 8081 / 8082
  • 数据库: resume_db
  • Dubbo 协议: dubbo(端口自动分配)
  • 服务注册: Nacos

关键配置 (application.yml):

server:
  port: 8081

spring:
  application:
    name: weh-service-resume-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852
        namespace: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
  datasource:
    url: jdbc:mysql://localhost:3306/resume_db

dubbo:
  scan:
    base-packages: com.weh.resume.service.impl
  protocol:
    name: dubbo
    port: -1  # 自动分配端口
  registry:
    address: nacos://${spring.cloud.nacos.discovery.server-addr}

4. weh-service-autodeliver-8090(自动投递服务消费者)

职责: 消费简历服务,提供自动投递相关接口

配置要点:

  • 端口: 8090
  • 服务注册: Nacos
  • 配置中心: Nacos Config
  • 熔断限流: Sentinel
  • RPC 调用: Dubbo

关键配置 (bootstrap.yml):

spring:
  application:
    name: weh-service-autodeliver-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852
        namespace: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
      config:
        server-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852
        namespace: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
        file-extension: yaml
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080
      datasource:
        ds1:  # 流控规则
          nacos:
            data-id: ${spring.application.name}-flow-rules
            rule-type: flow
        ds2:  # 降级规则
          nacos:
            data-id: ${spring.application.name}-degrade-rules
            rule-type: degrade

核心功能

1. 服务注册与发现

所有服务启动时自动注册到 Nacos,通过服务名实现服务发现。

启用方式:

@SpringBootApplication
@EnableDiscoveryClient
public class AutodeliverApplication8090 {
    public static void main(String[] args) {
        SpringApplication.run(AutodeliverApplication8090.class, args);
    }
}

2. Dubbo RPC 调用

服务提供者:

@DubboService
public class ResumeServiceImpl implements ResumeService {
    @Override
    public Integer findDefaultResumeByUserId(Long userId) {
        // 业务逻辑
    }
}

服务消费者:

@RestController
@RequestMapping("/autodeliver")
public class AutodeliverController {
    
    @DubboReference
    private ResumeService resumeService;
    
    @GetMapping("/checkState/{userId}")
    public Result<?> findResumeOpenState(@PathVariable Long userId) {
        Integer status = resumeService.findDefaultResumeByUserId(userId);
        return Result.success(status);
    }
}

3. Sentinel 流量控制

配置方式:

@GetMapping("/checkState/{userId}")
@SentinelResource(
    value = "findResumeOpenState",
    blockHandlerClass = SentinelHandlerClass.class,
    blockHandler = "blockHandler",
    fallbackClass = SentinelHandlerClass.class,
    fallback = "fallbackHandler"
)
public Result<?> findResumeOpenState(@PathVariable Long userId) {
    // 业务逻辑
}

异常处理类:

public class SentinelHandlerClass {
    // 流控异常处理
    public static Result<?> blockHandler(Long userId, BlockException ex) {
        return Result.error("请求过于频繁,请稍后再试");
    }
    
    // 降级处理
    public static Result<?> fallbackHandler(Long userId) {
        return Result.error("系统繁忙,请稍后再试");
    }
}

Nacos 规则配置示例:

流控规则 (weh-service-autodeliver-nacos-flow-rules):

[
  {
    "resource": "findResumeOpenState",
    "limitApp": "default",
    "grade": 1,
    "count": 2,
    "strategy": 0,
    "controlBehavior": 0
  }
]

降级规则 (weh-service-autodeliver-nacos-degrade-rules):

[
  {
    "resource": "findResumeOpenState",
    "grade": 0,
    "count": 0.5,
    "timeWindow": 10
  }
]

4. 配置中心

通过 Nacos Config 实现配置动态管理:

配置文件格式: weh-service-autodeliver-nacos.yaml

Data ID: ${spring.application.name}.${file-extension}

Group: DEFAULT_GROUP

Namespace: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9

快速开始

前置条件

  1. 安装 Nacos 集群

    • 下载 Nacos 2.x 版本
    • 配置集群模式(3个节点:8848, 8850, 8852)
    • 创建命名空间:af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
  2. 安装 MySQL

    • 创建数据库:resume_db
    • 配置用户名密码:root/123456
  3. 安装 Sentinel Dashboard

    • 下载 Sentinel Dashboard
    • 启动端口:8080

启动步骤

  1. 编译项目

    cd weh-resume-nacos
    mvn clean install
    
  2. 启动简历服务(提供者)

    # 启动实例1
    cd weh-service-resume-8081
    mvn spring-boot:run
    
    # 启动实例2
    cd weh-service-resume-8082
    mvn spring-boot:run
    
  3. 启动自动投递服务(消费者)

    cd weh-service-autodeliver-8090
    mvn spring-boot:run
    
  4. 验证服务

    • 访问 Nacos 控制台:http://localhost:8848/nacos
    • 查看服务列表,确认服务已注册
    • 访问 Sentinel 控制台:http://localhost:8080
    • 查看服务监控

测试接口

查询简历状态:

GET http://localhost:8090/autodeliver/checkState/{userId}

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": 1
}

配置说明

Nacos 配置中心

命名空间 ID: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9

配置文件列表:

  1. weh-service-autodeliver-nacos.yaml - 自动投递服务配置
  2. weh-service-autodeliver-nacos-flow-rules - 流控规则
  3. weh-service-autodeliver-nacos-degrade-rules - 降级规则

Sentinel 规则配置

流控规则参数说明:

  • resource: 资源名称
  • grade: 限流阈值类型(0-线程数,1-QPS)
  • count: 限流阈值
  • strategy: 流控策略(0-直接,1-关联,2-链路)
  • controlBehavior: 流控效果(0-快速失败,1-Warm Up,2-排队等待)

降级规则参数说明:

  • resource: 资源名称
  • grade: 熔断策略(0-慢调用比例,1-异常比例,2-异常数)
  • count: 阈值
  • timeWindow: 熔断时长(秒)

Actuator 监控端点

暴露端点: management.endpoints.web.exposure.include=*

常用端点:

  • /actuator/health - 健康检查
  • /actuator/info - 应用信息
  • /actuator/metrics - 指标信息

部署说明

Docker 部署

构建镜像:

FROM openjdk:17-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

构建命令:

mvn clean package
docker build -t weh-resume-service:latest .

生产环境配置建议

  1. Nacos 集群: 至少3个节点,保证高可用
  2. 数据库: 主从复制,读写分离
  3. Sentinel: 生产环境建议使用持久化存储规则
  4. 监控: 集成 Prometheus + Grafana
  5. 日志: 统一日志收集(ELK)

常见问题

1. Nacos 连接失败

问题: 服务无法注册到 Nacos

解决方案:

  • 检查 Nacos 服务是否启动
  • 确认命名空间 ID 是否正确
  • 检查网络连接和防火墙配置

2. Dubbo 服务调用失败

问题: 消费者无法调用提供者服务

解决方案:

  • 确认服务提供者已启动并注册
  • 检查 Dubbo 扫描包路径配置
  • 查看 Nacos 控制台服务列表

3. Sentinel 规则不生效

问题: 配置的流控规则未生效

解决方案:

  • 确认 Sentinel Dashboard 已启动
  • 检查 Nacos 配置文件格式是否正确
  • 确认资源名称与 @SentinelResource value 一致

4. 配置中心无法读取

问题: 应用启动时无法从 Nacos 读取配置

解决方案:

  • 确认 bootstrap.yml 配置正确
  • 检查 Data ID 和 Group 是否匹配
  • 确认命名空间 ID 正确

架构优势

  1. 服务治理: Nacos 提供完整的服务注册与发现机制
  2. 配置管理: 配置中心实现配置动态更新
  3. 流量控制: Sentinel 保护服务稳定性
  4. 高性能 RPC: Dubbo 提供高效的远程调用
  5. 高可用: 集群部署保证服务可用性
  6. 可扩展: 微服务架构便于水平扩展

技术选型理由

技术选型理由
Nacos同时支持服务注册与配置管理,简化架构
Dubbo高性能 RPC 框架,适合大规模微服务调用
Sentinel阿里开源流量防卫组件,与 Spring Cloud Alibaba 集成度高
Spring Data JPA简化数据访问层开发,提高开发效率
Spring Boot 2.7.6稳定版本,与 Spring Cloud Alibaba 兼容性好

版本兼容性

组件版本说明
Spring Boot2.7.6基础框架
Spring Cloud2021.0.9与 Spring Boot 2.7.x 配套
Spring Cloud Alibaba2.2.9.RELEASE与 Spring Cloud 2021.x 配套
JDK17LTS 版本
Dubbo3.2.11最新稳定版
Sentinel1.8.6与 Dubbo 3.x 兼容

开发规范

代码规范

  1. 包结构规范:

    • controller: 控制器层
    • service: 业务逻辑层
    • dao: 数据访问层
    • pojo: 实体类
    • config: 配置类
    • exception: 异常处理
  2. 命名规范:

    • 类名使用大驼峰命名法
    • 方法名使用小驼峰命名法
    • 常量使用全大写下划线分隔
  3. 注释规范:

    • 类注释包含作者、版本、描述、日期
    • 方法注释说明功能、参数、返回值

Git 提交规范

feat: 新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式调整
refactor: 重构
test: 测试相关
chore: 构建/工具链相关

参考资料

01 Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。 阅读详情

相关推荐

Spring Cloud Alibaba入门教程合集-01【微服务和Spring Cloud Alibaba介绍】

随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构—>垂直应用架构—>分布式架构—>SOA架构—>微服务架构,当然还有悄然兴起的Service Mesh(服务网格化)。接下来我们就来了解一下每种系统架构是什么样子的, 以及各有什么优缺点。1.1.1 单体应用架构互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,这样可以减少开发、部署和维护的成本。比如说一个电商系统,里面会包含

tulingxueyuanXM的博客 5750

一、什么是Spring Cloud Alibaba(项目整合Spring Cloud Alibaba毕业版)

(一)Spring Cloud简介 因为Spring Cloud Alibaba是Spring Cloud的一个子项目,所以在介绍Spring Cloud Alibaba之前,先简单说一下Spring Cloud。Spring Cloud是快速构建分布式系统的工具集,包括配置管理、服务注册与服务发现、路由、端到端的调用、负载均衡、断路器、全局锁、分布式消息等,对于这些功能,Spring ...

u012532504的专栏 2万+

SpringCloudAlibaba入门教程-【微服务和Spring Cloud Alibaba介绍】

1、微服务介绍1.1 系统架构演变 随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。 从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构—>垂直应用架构—>分布 式架构—>SOA架构—>微服务架构,当然还有悄然兴起的Service Mesh(服务网格化)。 接下来我们就来了解一下每种系统架构是什么样子的,以及各有什么优缺点。1.1.1 单体应用架构 互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,这 样可以减少开发、部署

ZXZN027的博客 3257

Spring Cloud 与 Spring Cloud Alibaba 微服务开发流程详解:解耦之道

在当今数字化转型加速推进的背景下,企业应用架构正经历着从单体架构向微服务架构的重大转变。微服务架构通过将应用拆分成多个小型、独立的服务,每个服务专注于特定的业务功能,实现了系统的高可扩展性、灵活性和维护性。而Spring Cloud与Spring Cloud Alibaba作为微服务架构领域的杰出框架,为开发者提供了强大的工具和便捷的开发体验,助力企业高效构建基于微服务的应用系统。

shaozheng0503的博客 1469

Spring Cloud Alibaba与K8s的集成

Spring Cloud Alibaba 与 K8s 的集成,就像让智能工厂接入全球化物流网——前者专注业务精细化管理,后者提供弹性基础设施。下一篇文章我们将实战灰度发布,像在游乐场同时开放新旧过山车,逐步切换流量。如果你在容器化过程中经历过“水土不服”,这种组合方案就是专治不服的“调和剂”。技术融合的魅力,在于让每个组件做自己最擅长的事。

caishuangxi111的博客 1759

Spring Cloud Alibaba 介绍与版本映射关系

Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,这套规范共有两代实现。(子项目):● 第一代实现: Spring Cloud Netflix,● 第二代实现: Spring Cloud Alibaba。2018 年 12 月12 日,Netflix 公司宣布 Spring Cloud Netflix 系列大部分组件都进入维护模式,不再添加新特性。

web18285997089的博客 1016

微服务治理系列- Spring Cloud alibaba 篇 第一章初识 SpringCloud alibaba

概述 2018 年 10 月 31 日的凌晨,这个伟大的日子里,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 Maven 中央库发布了第一个版本。 Spring Cloud for Alibaba 0.2.0 released The Spring Cloud Alibaba project, consisting of Alibaba’...

csdn_welearn的博客 3956

Spring Cloud(十三)Spring Cloud alibaba

本文对比了单体架构和微服务架构的特点。单体架构简单但存在团队协作成本高、发布效率低、可用性差等问题。微服务架构通过服务拆分实现单一职责、团队自治和服务自治,有效解决了这些问题。Spring Cloud是目前Java领域最全面的微服务组件集合,结合Spring Boot简化了开发。文章还介绍了Spring Cloud版本与Spring Boot版本的对应关系,以及Spring Cloud Alibaba作为Spring Cloud组件成员的地位。微服务架构特别适合大型互联网项目开发,已成为行业主流选择。

kong7906928的博客 1097

Spring Cloud、Spring Cloud Alibaba微服务实战

Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及的配置管理、服务治理、容错管理、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。Spring Cloud是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在Spring Boot的基础上轻松地实现微服务系统的构建。Spring Cloud提供以微服务为核心的分布式系统构建标准。

草原印象的博客 945

Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点

Spring Cloud是一系列框架的集合,它基于Spring Boot构建,为分布式系统开发提供了一站式解决方案。它提供了诸如服务发现与注册、配置中心、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话等多种功能组件,极大地简化了分布式系统的开发难度。Spring Cloud Alibaba是阿里巴巴结合自身在分布式系统开发中的实践经验,对Spring Cloud进行的扩展和增强。

恩爸编程 1914

Spring Cloud Alibaba之 AI

Spring Cloud Alibaba AI 为 Java 开发者提供了一个快速接入并使用阿里云通义系列大模型的解决方案。通过整合 Spring Cloud Alibaba 和 Spring AI,开发者可以轻松地构建基于 AI 的微服务应用,实现对话、文生图、文生语音等多种功能。本文提供了一个简单的在线聊天 AI 应用示例,展示了从项目创建、依赖引入、配置文件编写到业务逻辑实现的全过程。

一个老Java开发的自白 2495

微服务Spring Cloud 和 Spring Cloud Alibaba

搭建Java微服务项目主要涉及Spring Boot、Spring Cloud、Eureka、Docker、消息队列、数据库等技术。项目结构可以按微服务划分,使用Spring Cloud来管理微服务之间的通信和配置。Spring Cloud Alibaba 是阿里巴巴基于 Spring Cloud 生态的扩展,提供了一套微服务架构解决方案,集成了阿里巴巴的中间件,比如 Nacos、Sentinel、RocketMQ、Seata 等。

weixin_44719499的博客 2581

Spring Cloud Alibaba 整合Nacos实战

Spring Cloud Alibaba 整合Nacos

congge_study的博客 7898

Spring Cloud 生态之Spring Cloud Alibaba组件实现者

单体架构;分布式;微服务;Spring Cloud;Spring Cloud Alibaba;远程调用;Nacos注册中心;LoadBanlancer负载均衡;OpenFeign请求发送;

weixin_52634451的博客 1808

Spring Cloud Alibaba系列教程——Spring Cloud Alibaba开篇

随着Spring Cloud Alibaba的发展,Spring Cloud Alibaba的相关组件逐渐的成熟,对于它的学习和研究已经是java开发人员的趋势。这篇博文主要内容是介绍什么是Spring Cloud Alibaba,Spring Cloud 与Spring Cloud Alibaba的关系,以及我们为什么要学习它,以及畅想Spring Cloud Alibaba未来发展。

努力+坚持,而且还很年轻 6652

Spring Cloud Alibaba 大型微服务项目实战

10大组件精讲+微服务项目实操,彻底通关微服务开发

斌擎科技 3048

微服务与Spring Cloud Alibaba简介

微服务架构(Microservices Architecture)是一种云原生的架构模式,它将一个大型单体应用拆分为多个。

m0_74808313的博客 1095

Spring Cloud Alibaba 微服务开发实践

Spring Cloud Alibaba 是阿里巴巴开源的基于 Spring Cloud 的微服务框架。该项目从最初孵化到现在已经历经十多年的发展,得到了广泛的应用。其中主要集成了阿里巴巴中间件生态中的组件,比如 Nacos、Sentinel、RocketMQ 和 Dubbo。这些组件在 Spring Cloud 中进行了整合,让 Spring Cloud 用户能够更加简单方便地使用这些组件。因此,Spring Cloud Alibaba 如今已成为众多 Java 开发者的最爱。

AI天才研究院 2277
上一篇: SpringCloud微服务项目开发实战流程
下一篇: 从实战中来详解Claude Code的基本应用
IT_WEH_coder
博客等级 码龄5年 2万+粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

IT_WEH_coder

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

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

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

打赏作者

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

抵扣说明:

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

余额充值