Spring Cloud Alibaba

本文参考官方文档:Spring Cloud Alibaba

1. 简介

Spring Cloud Alibaba 是阿里巴巴开源中间件与 Spring Cloud 体系的融合,提供了微服务开发一站式解决方案。它包含开发分布式应用微服务所需的所有组件,使得开发者可以通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

2. 核心功能

Spring Cloud Alibaba 的核心功能包括:

  • 服务限流降级:集成了 Sentinel,用于流量控制、熔断降级和系统负载保护,确保服务的稳定性。

  • 服务注册与发现:通过 Nacos 实现服务的注册与发现,适配 Spring Cloud 服务注册与发现标准,并集成了负载均衡组件。

  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时能够自动刷新。

  • 消息驱动能力:基于 Spring Cloud Stream 构建消息驱动能力,使用 RocketMQ Binder 完成 Spring Cloud 应用消息的订阅和发布。

  • 分布式事务:使用 Seata 解决分布式事务问题,提供高性能且对业务零侵入的解决方案。

  • Dubbo RPC:扩展了 Spring Cloud 服务间调用的通信协议,支持 Apache Dubbo RPC。

3. 核心组件

Spring Cloud Alibaba 的核心组件包括:

  • Sentinel:用于流量控制、熔断降级和系统负载保护,保护服务稳定性。

  • Nacos:动态服务发现、配置管理和服务管理平台,易于构建云原生应用。

  • RocketMQ:开源的分布式消息系统,提供低延迟、高可靠的消息发布与订阅服务。

  • Seata:高性能微服务分布式事务解决方案,易于使用。

  • Dubbo:高性能 Java RPC 框架,支持服务间调用。

4. 架构

Spring Cloud Alibaba 的架构设计旨在简化微服务的开发和部署。通过集成 Nacos 作为服务发现和配置中心,Sentinel 作为流量控制和熔断降级工具,以及 RocketMQ 和 Seata 作为消息和事务处理工具,Spring Cloud Alibaba 提供了一个完整的微服务解决方案。

  • Nacos Discovery:服务注册与发现组件,用于微服务的注册与发现。

  • 微服务实例:表示系统中的微服务实例。

  • Sentinel:流量控制与熔断组件,用于保护微服务不被过载。

  • Config:配置管理组件,用于统一管理微服务的配置信息。

  • Seata:分布式事务管理组件,用于协调和管理微服务间的事务。

  • RocketMQ:消息队列组件,用于异步消息传递和解耦服务。

  • Gateway:API 网关组件,用于路由请求和提供统一的入口。

  • 业务逻辑:表示微服务中实现的具体业务逻辑。

Spring Cloud Alibaba 通过整合这些组件,为微服务架构提供了一站式的解决方案。

5. 快速开始

5.1 依赖配置

首先,在项目的 pom.xml 文件中添加 Spring Cloud Alibaba 的依赖管理,以及所需的依赖。

XML 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Nacos Discovery -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- Nacos Config -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <!-- Spring Cloud Gateway -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!-- Sentinel -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
</dependencies>

5.2 搭建服务注册中心(Nacos)

  1. 下载并启动 Nacos

    1. 访问 ++Nacos Releases++ 下载 Nacos。

    2. 解压后进入 bin 目录,执行启动命令:

      • Windows:startup.cmd -m standalone

      • Linux/Unix/Mac:sh startup.sh -m standalone

    3. 启动成功后,访问 http://localhost:8848/nacos 进入 Nacos 控制台。

5.3 创建服务提供者

5.3.1 添加依赖

XML 复制代码
<dependencies>
    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Nacos Discovery -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

5.3.2 配置 application.properties

XML 复制代码
server.port=8081
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=localhost:8848

5.3.3 创建主应用和提供服务的方法

java 复制代码
package com.example.springcloudalibabademo.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
    @GetMapping("/hello")
    public String hello() {
        return "Hello from Provider!";
    }
}

6. 生态集成

Spring Cloud Alibaba 特别关注与 Dubbo、RocketMQ 等阿里开源生态工具的无缝对接。以下是如何集成 RocketMQ 的示例。

集成 RocketMQ

  • 添加依赖
XML 复制代码
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
  • 配置 application.properties
XML 复制代码
rocketmq.name-server=localhost:9876
rocketmq.producer.group=my-group
  • 生产者和消费者代码示例
java 复制代码
@Component
public class RocketMQProducer {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @Value("${rocketmq.producer.group}")
    private String producerGroup;

    @PostConstruct
    public void init() {
        rocketMQTemplate.setProducerGroup(producerGroup);
    }

    public void send(String message) {
        rocketMQTemplate.convertAndSend("topic-test", message);
    }
}

@Component
public class RocketMQConsumer {
    @RocketMQMessageListener(topicConstants = "topic-test", consumerGroup = "my-group")
    public void receive(String message) {
        System.out.println("Received <" + message + ">");
    }
}

7. 组件化设计

Spring Cloud Alibaba 的组件化设计和对云原生应用的支持,使其成为构建现代微服务架构的理想选择。以下是如何使用 Spring Cloud Alibaba 组件来构建微服务的示例。

使用 Spring Cloud Gateway

  • 添加依赖
XML 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  • 配置路由规则
XML 复制代码
spring.cloud.gateway.routes[0].id=provider-route
spring.cloud.gateway.routes[0].uri=lb://service-provider
spring.cloud.gateway.routes[0].predicates[0]=Path=/api/hello
  • 创建 Gateway 应用
java 复制代码
@SpringBootApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

不积跬步,无以至千里 --- xiaokai

相关推荐
天天扭码1 小时前
五天SpringCloud计划——DAY1之mybatis-plus的使用
java·spring cloud·mybatis
luckywuxn7 小时前
Spring Cloud Alibaba、Spring Cloud 与 Spring Boot各版本的对应关系
spring boot·spring·spring cloud
LIT-涛8 小时前
JavaEE初学07
数据库·oracle·java-ee
&梧桐树夏8 小时前
JavaEE 线程安全
java-ee·多线程
界面开发小八哥8 小时前
「Java EE开发指南」如何使用Visual JSF编辑器设计JSP?(一)
java·ide·java-ee·编辑器·myeclipse
先睡8 小时前
javaEE
java·java-ee
冷心笑看丽美人8 小时前
Spring 框架七大模块(Java EE 学习笔记03)
学习·spring·架构·java-ee
郑祎亦9 小时前
JavaWeb开发:HTML 页面与接口对接
前端·后端·java-ee·html
chudaxiakkk9 小时前
记录spring-boot 3.X版本整合RocketMq
java·spring boot·rocketmq
Theodore_102220 小时前
7 设计模式原则之合成复用原则
java·开发语言·jvm·设计模式·java-ee·合成复用原则