SpringBoot Alibaba 微服务教程

62 阅读4分钟

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 服务注册与发现实践

服务提供者配置

  1. 添加依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 配置文件 (application.yml):
server:
  port: 8001
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  1. 启动类添加注解:
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

服务消费者配置

  1. 添加依赖:
<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>
  1. 配置 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

八、最佳实践与注意事项

  1. 版本兼容性:确保 Spring Boot、Spring Cloud 和 Spring Cloud Alibaba 版本匹配
  2. 生产环境配置
    • Nacos 集群部署,确保高可用
    • Sentinel 控制台持久化配置
    • Seata 事务分组和注册中心正确配置
  3. 性能优化
    • 合理设置 Sentinel 限流阈值
    • Nacos 配置缓存机制
    • Seata 事务超时时间设置

通过以上教程,您可以快速上手 Spring Cloud Alibaba 微服务开发,构建高可用、可扩展的分布式系统。