SpringBoot Alibaba 微服务教程
一、Spring Cloud Alibaba 概述
Spring Cloud Alibaba 是阿里巴巴开源的基于 Spring Cloud 的分布式微服务解决方案,它将阿里的中间件产品与 Spring Cloud 框架无缝集成,为开发者提供简单、便捷的一站式微服务开发解决方案。
Spring Cloud 微服务体系
- Spring Cloud 本身是一套微服务规范,共有两代实现
- Spring Cloud Netflix:第一代实现,包含 Eureka、Ribbon、Feign、Hystrix 等组件
- Spring Cloud Alibaba:第二代实现,包含 Nacos、Sentinel、Seata 等核心组件
二、核心组件介绍
1. Nacos - 注册配置中心
Nacos 提供服务注册发现和配置管理功能,是 Spring Cloud Alibaba 的核心组件之一。
主要功能:
- 服务注册和发现:支持 DNS 和 RPC 服务发现
- 动态配置服务:集中管理各种环境的应用配置
- 实时健康监控:对服务进行健康检查
- 动态 DNS 服务:支持权重路由策略
2. Sentinel - 流量控制与熔断降级
Sentinel 是阿里开源的面向分布式服务架构的高可用流量控制组件。
核心概念:
- 流量控制:基于 QPS 或并发数控制流量
- 熔断降级:当服务出现异常时自动熔断,防止级联故障
- 系统保护:防止系统负载过高,保障系统稳定性
熔断策略:
- 基于响应时间
- 基于异常比例
- 基于异常数
3. Seata - 分布式事务解决方案
Seata 是阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能、易用的分布式事务服务。
核心组件:
- Transaction Coordinator (TC):事务协调者,维护全局事务状态
- Transaction Manager (TM):事务管理器,定义全局事务范围
- Resource Manager (RM):资源管理器,管理分支事务资源
支持的事务模式:
- AT模式:自动补偿事务,适合关系型数据库,无侵入设计
- TCC模式:Try-Confirm-Cancel,适合高一致性场景
- SAGA模式:长事务模式,适合大业务流程
- XA模式:基于数据库XA协议,强一致性
三、环境搭建与快速入门
版本说明
Spring Cloud Alibaba、Spring Cloud 和 Spring Boot 之间有严格的版本对应关系,需要确保版本匹配以避免兼容性问题。
推荐访问官方版本说明:github.com/alibaba/spr…
项目初始化示例
父项目 POM 配置:
<properties>
<java.version>17</java.version>
<spring-boot.version>3.2.4</spring-boot.version>
<spring-cloud.version>2023.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
四、Nacos 服务注册与发现实践
服务提供者配置
- 添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 配置文件 (application.yml):
server:
port: 8001
spring:
application:
name: service-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
- 启动类添加注解:
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
服务消费者配置
- 添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 配置 Feign 客户端:
@FeignClient(name = "service-provider")
public interface ProviderClient {
@GetMapping("/hello")
String hello();
}
五、Sentinel 流量控制实现
1. 添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2. 配置文件:
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
port: 8719
3. 使用注解定义资源:
@RestController
public class TestController {
@SentinelResource(value = "hello", blockHandler = "blockHandlerMethod")
@GetMapping("/hello")
public String hello() {
return "Hello Sentinel!";
}
public String blockHandlerMethod(BlockException ex) {
return "服务限流,请稍后重试";
}
}
六、Seata 分布式事务实践
1. 环境准备:
- 下载并启动 Seata Server
- 配置 Nacos 作为 Seata 的配置中心
2. 添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
3. 配置文件:
seata:
tx-service-group: my_test_tx_group
service:
vgroup-mapping:
my_test_tx_group: default
grouplist:
default: localhost:8091
registry:
type: nacos
nacos:
server-addr: localhost:8848
namespace: ""
group: SEATA_GROUP
4. 使用分布式事务:
@Service
public class OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private AccountClient accountClient;
@Autowired
private StorageClient storageClient;
@GlobalTransactional
public void create(Order order) {
// 创建订单
orderDao.create(order);
// 扣减账户余额
accountClient.decrease(order.getUserId(), order.getMoney());
// 扣减库存
storageClient.decrease(order.getProductId(), order.getCount());
}
}
七、Gateway 网关集成
Spring Cloud Gateway 可以与 Spring Cloud Alibaba 无缝集成,实现路由、负载均衡和过滤功能。
集成示例:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
八、最佳实践与注意事项
- 版本兼容性:确保 Spring Boot、Spring Cloud 和 Spring Cloud Alibaba 版本匹配
- 生产环境配置:
- Nacos 集群部署,确保高可用
- Sentinel 控制台持久化配置
- Seata 事务分组和注册中心正确配置
- 性能优化:
- 合理设置 Sentinel 限流阈值
- Nacos 配置缓存机制
- Seata 事务超时时间设置
通过以上教程,您可以快速上手 Spring Cloud Alibaba 微服务开发,构建高可用、可扩展的分布式系统。