继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

SpringCloud Alibaba入门教程:快速搭建微服务应用

慕标琳琳
关注TA
已关注
手记 315
粉丝 18
获赞 140
概述

Spring Cloud Alibaba 是一个基于Spring Cloud的微服务开发框架,提供了服务注册与发现、配置中心、服务网关、消息总线、分布式事务等解决方案,扩展了Spring Cloud对阿里云产品与服务的支持,帮助开发者高效构建和管理微服务应用。

引入SpringCloud Alibaba

什么是SpringCloud Alibaba

Spring Cloud Alibaba 是一个基于Spring Cloud的微服务开发框架,由阿里云主导开发和维护。它提供了在分布式环境下处理各种挑战的解决方案,包括服务注册与发现、配置中心、服务网关、消息总线、负载均衡、分布式事务等。Spring Cloud Alibaba 是 Spring Cloud 生态系统的一部分,扩展了 Spring Cloud 对阿里云产品与服务的支持,使得开发者能够高效地构建和管理微服务应用。

SpringCloud Alibaba的优势与应用场景

  1. 高性能的服务注册与发现:Spring Cloud Alibaba 使用Nacos作为服务注册与发现中心,Nacos具有高可用性和高性能,能更好地支持动态刷新服务配置信息。
  2. 分布式事务管理:Seata支持分布式事务,使得多个服务之间的事务操作可以保持一致性。
  3. 消息通信:通过RabbitMQ或RocketMQ等消息队列,可以实现服务之间的异步通信,提高系统响应速度和可用性。
  4. 服务网关与API网关:通过Spring Cloud Gateway或Nacos Gateway,可以实现统一的入口控制,进行路由、过滤、限流等功能。
  5. 服务监控与链路追踪:通过Arthas和SofaTracer等工具,可以实现服务的实时监控与链路追踪,帮助快速定位问题。

如何开始使用SpringCloud Alibaba

  1. 环境配置:确保安装了Java SDK、Maven或Gradle、Nacos服务端、Seata服务端、RabbitMQ服务端等。
  2. 依赖引入:在项目中引入SpringCloud Alibaba的依赖。
  3. 基本配置:配置Nacos、Seata、RabbitMQ等服务所需的连接信息。
  4. 代码实现:根据实际需求编写服务注册与发现、分布式事务、消息通信等核心代码。

快速搭建SpringCloud Alibaba项目

准备工作与环境配置

在开始开发之前,需要完成一些环境配置和准备工作:

  1. 安装Java SDK:确保安装了JDK 1.8及以上版本,因为Spring Cloud Alibaba项目要求使用Java 8或更高版本。
  2. 安装Maven或Gradle:这些工具用于构建和管理项目依赖。
  3. 安装Nacos:Nacos是服务发现和配置中心,下载Nacos Server并启动。可以使用命令sh startup.cmd (Windows) 或sh bin/startup.sh (Linux/MacOS) 启动。
  4. 安装Seata:Seata用于分布式事务管理,下载Seata Server并启动。启动命令为sh bin/seata-server.sh
  5. 安装RabbitMQ:RabbitMQ是消息队列服务,下载并启动RabbitMQ服务。
  6. 创建项目目录结构:项目目录结构建议如下:
    spring-cloud-alibaba
    ├── pom.xml
    ├── spring-cloud-alibaba-parent
    │   └── pom.xml
    ├── service-provider
    │   └── pom.xml
    └── service-consumer
         └── pom.xml
  7. 安装IDE:推荐使用IntelliJ IDEA或Eclipse,这些IDE对Spring Cloud Alibaba有很好的支持。

创建父工程与子模块

  1. 创建父工程
    在项目根目录下创建一个名为spring-cloud-alibaba-parent的目录,然后在该目录下创建pom.xml文件,用于定义项目的依赖关系。

    <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <groupId>com.example</groupId>
       <artifactId>spring-cloud-alibaba-parent</artifactId>
       <version>1.0.0</version>
       <packaging>pom</packaging>
       <modules>
           <module>service-provider</module>
           <module>service-consumer</module>
       </modules>
       <properties>
           <spring.cloud.version>2021.0.4</spring.cloud.version>
           <spring.boot.version>2.6.9</spring.boot.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>org.springframework.boot</groupId>
                   <artifactId>spring-boot-dependencies</artifactId>
                   <version>${spring.boot.version}</version>
                   <type>pom</type>
                   <scope>import</scope>
               </dependency>
           </dependencies>
       </dependencyManagement>
    </project>
  2. 创建子模块
    spring-cloud-alibaba根目录下创建两个子模块service-providerservice-consumer,分别用于提供服务和消费服务。
    • service-provider目录下创建pom.xml,引入相关依赖。
      <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
         <groupId>com.example</groupId>
         <artifactId>spring-cloud-alibaba-parent</artifactId>
         <version>1.0.0</version>
      </parent>
      <artifactId>service-provider</artifactId>
      <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         </dependency>
      </dependencies>
      </project>
    • 同样在service-consumer目录下创建pom.xml,引入相关依赖。
      <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
         <groupId>com.example</groupId>
         <artifactId>spring-cloud-alibaba-parent</artifactId>
         <version>1.0.0</version>
      </parent>
      <artifactId>service-consumer</artifactId>
      <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         </dependency>
      </dependencies>
      </project>

添加SpringCloud Alibaba依赖

在每个子模块的pom.xml中添加SpringCloud Alibaba的相关依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

使用Nacos进行服务注册与发现

Nacos简介与安装

Nacos是一个动态服务发现、配置管理和服务管理平台,支持多种应用场景,如服务发现和服务健康监测、动态配置服务、动态DNS服务等。Nacos提供了高可用的注册中心和配置中心功能,可以帮助开发者更高效地构建分布式系统。

Nacos的安装步骤

  1. 下载安装包:从Nacos官方网站下载最新版本的Nacos服务端安装包。
  2. 启动Nacos
    • 使用命令启动Nacos Server:
      sh bin/startup.cmd  (Windows)
      sh bin/startup.sh   (Linux/MacOS)
    • 访问Nacos控制台,默认地址为http://localhost:8848/nacos,用户名/密码均为nacos

如何在SpringCloud项目中集成Nacos

  1. 依赖添加:在pom.xml文件中添加Nacos依赖。
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
  2. 配置文件:在项目主配置文件中添加Nacos服务地址。
    spring:
     application:
       name: demo-service
     cloud:
       nacos:
         discovery:
           server-addr: 127.0.0.1:8848
  3. 启用服务发现:在主类上添加@EnableDiscoveryClient注解。
    @SpringBootApplication
    @EnableDiscoveryClient
    public class DemoApplication {
       public static void main(String[] args) {
           SpringApplication.run(DemoApplication.class, args);
       }
    }

服务注册与发现的基本操作

  1. 注册服务:服务启动后,Nacos会自动注册服务。
  2. 发现服务:服务消费者可以通过Nacos发现并调用服务提供者。
  3. 服务列表:在Nacos控制台中可以查看所有注册的服务列表。
  4. 服务状态监控:Nacos提供了服务状态监控功能,可以实时查看服务的健康状态。

通过Seata实现分布式事务管理

分布式事务的基本概念

分布式事务是指跨越多个数据库或服务的事务管理,确保所有操作要么全部成功,要么全部失败。分布式事务的核心挑战在于保证事务的一致性和可靠性,常见的解决方案包括两阶段提交(2PC)、三阶段提交(3PC)、基于消息队列的事务等。

Seata的安装与配置

  1. 下载Seata:从GitHub或官网下载Seata服务器端。
  2. 启动Seata
    • 使用命令启动Seata Server:
      sh bin/seata-server.sh
  3. 配置Seata:在registry.conf中配置Nacos作为注册中心。
    registry {
       # = 文件注册中心配置
       file {
           # 当前机器的ip
           serverAddr = 127.0.0.1:8848
       }
    }

Seata在SpringCloud项目中的应用

  1. 引入依赖:在pom.xml中添加Seata依赖。
    <dependency>
       <groupId>io.seata</groupId>
       <artifactId>seata-all</artifactId>
       <version>1.6.1</version>
    </dependency>
  2. 配置Seata客户端
    • 配置文件application.yml中的Seata客户端配置。
      seata:
      enabled: true
      application-id: service-provider
      tx-service-group: default
      service:
      vgroup-mapping:
       default: default_group
       service:
         transaction:
           log-mode: AT
           client:
             rm:
               asyncCommitBufferLimit: 10000
               reportRetryCount: 3
               reportSuccessWhenNoError: false
               reportRetryInterval: 3000
               lockRetryInterval: 1000
               lockRetryTimeout: 60000
               maxCommitRetryTimeout: 10000
               maxRollbackRetryTimeout: 10000
               pollingLongTxStoreInterval: 3000
               pollingLongTxTimeout: 10000
               pollingRetryInterval: 3000
      registry:
      type: nacos
      nacos:
       server-addr: 127.0.0.1:8848
       group: DEFAULT_GROUP
  3. 使用Seata注解
    • 在需要事务管理的Service或Repository上添加Seata注解,例如@GlobalTransactional
      @GlobalTransactional
      public void saveOrder() {
      // 业务逻辑
      }

利用RabbitMQ实现服务间的消息通信

RabbitMQ的简介与安装

RabbitMQ是一个开源的消息代理和队列服务器,它实现了高级消息队列协议(AMQP)。RabbitMQ支持多种编程语言,能够实现异步解耦的消息传递,适用于缓存、日志、队列、订阅/发布模式等场景。

RabbitMQ的安装步骤

  1. 下载安装包:从官方网站下载RabbitMQ安装包。
  2. 启动RabbitMQ
    • 使用命令启动RabbitMQ:
      rabbitmq-server

集成RabbitMQ与SpringCloud项目

  1. 引入依赖:在pom.xml中添加RabbitMQ依赖。
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
  2. 配置RabbitMQ:配置RabbitMQ连接信息和队列信息。
    spring:
     rabbitmq:
       host: localhost
       port: 5672
       username: guest
       password: guest
       virtual-host: /

消息队列的基本使用

  1. 创建消息生产者:定义一个消息生产者,将消息发送到指定队列。

    @SpringBootApplication
    public class ProducerApplication {
       @Autowired
       private RabbitTemplate rabbitTemplate;
    
       @Bean
       public Queue myQueue() {
           return new Queue("myQueue", true);
       }
    
       @Bean
       public TopicExchange myExchange() {
           return new TopicExchange("myExchange");
       }
    
       @Bean
       public Binding binding(Queue myQueue, TopicExchange myExchange) {
           return BindingBuilder.bind(myQueue).to(myExchange).with("routingKey");
       }
    
       public void sendMessage() {
           rabbitTemplate.convertAndSend("myExchange", "routingKey", "Hello World!");
       }
    }
  2. 创建消息消费者:定义一个消息消费者,从指定队列接收消息。
    @Service
    public class MessageReceiver {
       @RabbitListener(queues = "myQueue")
       public void receiveMessage(String message) {
           System.out.println("Received: " + message);
       }
    }

服务监控与链路追踪

服务监控与链路追踪是微服务架构中不可或缺的部分,可以帮助开发者实时监控服务状态,快速定位和解决问题。Spring Cloud Alibaba 提供了 Arthas 和 SofaTracer 等工具,用于实时监控与链路追踪。

Arthas配置示例

<dependency>
   <groupId>com.taobao.arthas</groupId>
   <artifactId>arthas-spring-boot-starter</artifactId>
   <version>3.5.2</version>
</dependency>

Arthas配置文件示例

spring:
  cloud:
   alibaba:
      arthas:
         enabled: true

SpringCloud Alibaba中的其他功能介绍

服务网关与API网关

服务网关是微服务架构中的一个重要组件,起到路由、过滤、限流等功能,支持不同服务之间的统一入口控制。Spring Cloud Gateway 是 Spring Cloud 提供的一个基于Spring5, Spring Boot 2和Project Reactor的新一代API网关实现。

使用方法

  1. 引入依赖:
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
  2. 配置路由规则:
    spring:
     cloud:
       gateway:
         routes:
           - id: route1
             uri: http://example.com
             predicates:
               - Path=/api/**

其它常用组件的简单介绍

  1. Spring Cloud Config:用于集中式配置管理。
  2. Spring Cloud Stream:实现消息驱动的微服务应用。
  3. Spring Cloud LoadBalancer:实现服务负载均衡。
  4. Spring Cloud Gateway:实现API网关。
  5. Spring Cloud Sleuth:实现服务跟踪。

这些组件共同构成了一个完整的微服务开发环境,使得开发者能够更高效地构建和管理微服务应用。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP