软件开发新技术复习

目录

SpringBoot

SpringBoot简介

SpringBoot优点

SpringBoot环境要求

SpringBoot项⽬创建

[能够使⽤Spring Initializr创建SpringBoot项⽬](#能够使⽤Spring Initializr创建SpringBoot项⽬)

[能够说出SpringBoot项⽬结构中每⼀个⽂件和配置的作⽤ :](#能够说出SpringBoot项⽬结构中每⼀个⽂件和配置的作⽤ :)

SpringBoot运⾏原理

依赖管理

spring-boot-starter-parent作⽤

spring-boot-starter-web作⽤

⾃动配置

启动类的作⽤

@SpringBootApplication注解作⽤及其组成

SpringBoot注解

​编辑

SpringBoot配置⽂件

常⽤配置属性

SpringBoot默认设置了静态资源的访问路径,将/**所有访问映射到以下目录:

YAML语法

SpringBoot支持三种配置文件application.propertiesapplication.yamlapplication.yml

多环境配置

SpringMVC功能扩展

拦截器配置

CORS跨域配置

SpringBoot打包部署

步骤:

[全局统⼀ 异常处理](#全局统⼀ 异常处理)

[方式2:@RestControllerAdvice + @ExceptionHandler](#方式2:@RestControllerAdvice + @ExceptionHandler)

SpringBoot整合MyBatis

SpringBoot整合Thymeleaf

Thymeleaf作用

Thymeleaf依赖和配置

[1、在Spring Boot 项目中使用 Thymeleaf模板,必须保证引入Thymeleaf 依赖。](#1、在Spring Boot 项目中使用 Thymeleaf模板,必须保证引入Thymeleaf 依赖。)

Thymeleaf常用语法属性和表达式

[Spring Security安全管理](#Spring Security安全管理)

[Spring Security作⽤](#Spring Security作⽤)

整合Security依赖

整合Security依赖后默认效果

实现⾃定义⽤户认证和授权

能够说出⾃定义⽤户认证和授权每⼀项配置的作⽤:

CSRF防护

概念

Security实现CSRF防护

SpringBoot整合RabbitMQ消息服务

消息服务概念和作⽤

RabbitMQ⼯作原理

[1. Broker](#1. Broker)

[2. Producer(生产者)](#2. Producer(生产者))

[3. Consumer(消费者)](#3. Consumer(消费者))

[4. Exchange(交换机)](#4. Exchange(交换机))

[5. Queue(队列)](#5. Queue(队列))

[6. Binding(绑定)](#6. Binding(绑定))

[7. Virtual Host(虚拟主机)](#7. Virtual Host(虚拟主机))

[8. Connection & Channel(连接与信道)](#8. Connection & Channel(连接与信道))

RabbitMQ的5种⼯作模式

[1. Work Queues(工作队列模式)](#1. Work Queues(工作队列模式))

[2. Publish/Subscribe(发布订阅模式)](#2. Publish/Subscribe(发布订阅模式))

[3. Routing(路由模式)](#3. Routing(路由模式))

[4. Topics(通配符模式)](#4. Topics(通配符模式))

[5. RPC(远程过程调用模式)](#5. RPC(远程过程调用模式))

SpringCloud微服务

微服务特点

SpringCloud微服务组件

一、服务发现组件

二、负载均衡组件

三、服务调用与远程通信组件

四、服务容错组件

五、配置管理组件

[六、API 网关组件](#六、API 网关组件)

Eureka注册中⼼⼯作原理

LoadBalancer负载均衡⼯作原理

[一、LoadBalancer 组件作用](#一、LoadBalancer 组件作用)


SpringBoot

SpringBoot简介

SpringBoot是基于Spring框架开发的全新框架,其设计目的是简化Java Web项目的搭建、配置、开发、运行、调试、部署等。

SpringBoot优点

1.可快速构建 独立的Spring应用

2直接嵌入Tomcat、Jetty和Undertow 服务器(无需部署WAR文件)

3提供依赖启动器 简化构建配置

4极大程度的自动化配置 Spring和第三方库

5提供生产就绪 功能(spring-boot-actuator)

6极少代码生成XML配置

SpringBoot环境要求

● SpringBoot 3+(内嵌Tomcat 10)

● JDK 17+

● Maven 3.5+

SpringBoot项⽬创建

能够使⽤Spring Initializr创建SpringBoot项⽬

  1. 访问 Spring Initializr

    打开 start.spring.io

  2. 项目配置

    • Project : 选择 Maven Project
    • Language : 选择 Java
    • Spring Boot: 选择稳定版本(如 3.1.2)
    • Group : 填写组织名(如 com.example
    • Artifact : 填写项目名(如 demo
    • Dependencies : 添加所需依赖(如 Spring WebSpring Data JPA 等)
  3. 生成项目

    点击 Generate 下载项目压缩包,解压到本地目录。

能够说出SpringBoot项⽬结构中每⼀个⽂件和配置的作⽤ :

src/main/java:存放项目的 Java 源代码

src/main/test的作⽤:存放项目的测试代码

src/main/resources作⽤:存放项目的配置文件和静态资源

src/main/resources/static:存放静态资源(HTML、CSS、JS、图片等)

src/main/resources/templates作⽤:存放模板文件(如 Thymeleaf 模板)

application.properties作⽤:配置项目的各种属性(如端口、数据库连接、日志等)

pom.xml的作⽤:定义项目依赖、构建配置和插件

以及其中每⼀个配置(spring-boot-starter-parent、spring-boot-starter web、spring-boot-starter-test、spring-boot-maven-plugin)的作⽤ :

复制代码
<!-- 继承Spring Boot父项目,提供依赖管理和插件配置 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.2</version>
</parent>

<!-- Spring Web Starter:提供Web开发能力(包括嵌入式Tomcat和Spring MVC) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Spring Test Starter:提供测试框架(JUnit、Mockito、Spring Test) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

<!-- Spring Boot Maven插件:打包可执行JAR/WAR,运行Spring Boot应用 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

SpringBoot运⾏原理

依赖管理

spring-boot-starter-parent作⽤

①标识该项目是SpringBoot项目,并指定SpringBoot版本号

②对一些常用技术框架的依赖文件进行了统一版本号管理

spring-boot-starter-web作⽤

提供Web开发场景所需的底层所有依赖文件,它对Web开发场景所需的依赖文件进行了统一管理。

⾃动配置

启动类的作⽤

会初始化Spring容器,扫描启动类所在的包及其子包,加载各种bean,完成自动配置。

@SpringBootApplication注解作⽤及其组成

@SpringBootApplication注解是一个组合注解,包含

@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三

个核心注解

@SpringBootConfiguration:表示当前类为SpringBoot配置类,可以被组件扫描器扫

@EnableAutoConfiguration:表示开启自动配置功能,是SpringBoot实现自动化配置

的关键注解

@ComponentScan:是一个组件扫描器,默认扫描启动类所在包及其子包,将包下加了

@Componet、@Controller、@Service、@Repository、@Configuration等注解

的 Bean 配置到 Spring 容器中

SpringBoot注解

@Configuration和@Bean注解:通过配置类的⽅式完成组件Bean注册到Spring容器中

@Value注解:结合SPEL表达式读取配置⽂件中单⼀属性的值

@ConfigurationProperties注解:将组件bean中的属性和配置⽂件中指定前缀的属性进⾏绑定

SpringBoot配置⽂件

常⽤配置属性

静态资源默认配置

SpringBoot默认设置了静态资源的访问路径,将/**所有访问映射到以下目录:

classpath:/META-INF/resources/:项目类路径下的META-INF文件夹下的resources文件夹下的所有文件。

classpath:/resources/:项目类路径下的resources文件夹下的所有文件。

classpath:/static/:项目类路径下的static文件夹下的所有文件

classpath:/public/:项目类路径下的public文件夹下的所有文件。

YAML语法

SpringBoot支持三种配置文件

application.properties
application.yaml
application.yml

多环境配置

激活环境:

SpringMVC功能扩展

可以使用Spring Boot提供的WebMvcConfigurer接口编写自定义配置来实现对MVC框架功能进行扩展。

通过重写WebMvcConfigurer接口里的方法来实现拦截器、格式转换器、视图控制器、静态资源处理、跨域处理等的配置。

拦截器配置

CORS跨域配置

CORS是W3C的一种跨域资源共享技术标准,目的是解决前端的跨域请求问题,允许浏览器向跨源服务器发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

SpringBoot中跨域访问的实现方案有三种

1@CrossOrigin注解

2全局配置实现

3基于过滤器的实现方案

以下为全局配置实现:

SpringBoot打包部署

步骤:

1.添加Maven打包插件

2.使用IDEA开发工具进行打包

  1. Jar包方式部署

全局统⼀ 异常处理

第一种是实现HandlerExceptionResolver接口(传统 Spring MVC 兼容方案)

复制代码
@Component // 注入 Spring 容器
public class GlobalExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, 
                                         HttpServletResponse response, 
                                         Object handler, 
                                         Exception ex) {
        // 设置响应为 JSON 格式(避免返回视图)
        response.setContentType("application/json;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            ResultResponse result = new ResultResponse();
            if (ex instanceof BusinessException) {
                result.setCode(400);
                result.setMsg(ex.getMessage());
            } else {
                result.setCode(500);
                result.setMsg("系统异常");
            }
            // 序列化为 JSON 返回
            out.write(new ObjectMapper().writeValueAsString(result)); 
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 返回空 ModelAndView,跳过视图解析
        return new ModelAndView(); 
    }
}

// 自定义业务异常(示例)
public class BusinessException extends RuntimeException {
    public BusinessException(String message) {
        super(message);
    }
}

方式2:@RestControllerAdvice + @ExceptionHandler

通过 @RestControllerAdvice(组合注解,含 @ControllerAdvice + @ResponseBody )标记全局异常处理类,搭配 @ExceptionHandler 注解方法,拦截指定类型异常,统一封装返回结果。

复制代码
// 全局异常处理类,作用范围覆盖所有 @RestController
@RestControllerAdvice 
public class GlobalExceptionHandler {

    // 拦截空指针异常,可指定具体异常类型
    @ExceptionHandler(NullPointerException.class) 
    public ResultResponse handleNullPointerException(NullPointerException ex) {
        // 日志记录异常(生产环境需优化,避免暴露敏感信息)
        log.error("空指针异常: ", ex); 
        // 封装统一响应,ResultResponse 是自定义返回体
        return ResultResponse.error(StatusEnum.PARAM_INVALID, "空指针异常,请检查参数"); 
    }

    // 拦截所有未明确处理的异常(兜底)
    @ExceptionHandler(Exception.class) 
    public ResultResponse handleException(Exception ex) {
        log.error("系统异常: ", ex);
        return ResultResponse.error(StatusEnum.SERVICE_ERROR, "服务器繁忙,请稍后重试");
    }
}

// 自定义统一返回体(示例)
@Data
public class ResultResponse<T> {
    private Integer code;
    private String msg;
    private T data;
    // 省略构造方法、工具方法...
}

// 自定义状态码枚举(示例)
public enum StatusEnum {
    SUCCESS(200, "成功"),
    PARAM_INVALID(400, "参数无效"),
    SERVICE_ERROR(500, "系统异常");
    // 省略属性、构造方法...
}

SpringBoot整合MyBatis

需要添加的依赖

SpringBoot没有提供MyBatis场景依赖,但是MyBatis开发团队自己适配了SpringBoot,提供了mybatis-spring-boot-starter依赖启动器实现数据访问操作。

能够实现SpringBoot与MyBatis的整合,并能说出每⼀项配置的作⽤

复制代码
spring:
 datasource:
     url: jdbc:mysql://localhost:3306/securitydb?useUnicode=true&characterE
 ncoding=utf-8&serverTimezone=GMT%2B8
     username: root
     password: 123456
     driver-class-name: com.mysql.cj.jdbc.Driver
 mybatis-plus:
     configuration:
         map-underscore-to-camel-case: true
         log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     mapper-locations: classpath:mapper/*.xml

能够使⽤注解的⽅式编写SQL语句

复制代码
 @Mapper
 public interface CommentMapper {
     @Select("select * from t_comment where id=#{id}")
     Comment selectCommentById(int id);

     @Delete("delete from t_comment where id=#{id}")
     int deleteComment(int id);

     @Insert("insert into t_comment values (null,#{content},#{author},#{aI
     d})")
     int insertComment(Comment comment);
 }

SpringBoot整合Thymeleaf

Thymeleaf作用

Thymeleaf是一种用于Web和和独立环境的现代服务器端的Java模板引l擎,其主要目标是将优雅的Java模板带到开发工作流程中,并且可以作为静态原型,让开发团队能更容易的协作。Thymeleaf 能够处理HTML、XML、JavaScript、CSS甚至纯文本。

Thymeleaf依赖和配置

1、在Spring Boot 项目中使用 Thymeleaf模板,必须保证引入Thymeleaf 依赖。

2、其次在全局配置文件中配置Thymeleaf模板的一些参数。如设置模板缓存、模板编码、模板样式、指定模板页面存放路径、指定模板页面名称的后缀

Thymeleaf常用语法属性和表达式

Spring Security安全管理

Spring Security作⽤

SpringSecurity是基于Spring框架的一个高度自定义的安全管理框架,为系统提供了声明式安全访问控制功能 ,减少了为系统安全而编写大量重复代码的工作。

SpringSecurity的安全管理有两个重要概念,分别是Authentication(认证)和Authorization(授权)。

整合Security依赖

一旦项目引人spring-boot-starter-security启动器,项目就自动加载Spring Security的自动化配置,并且具有了一些默认的安全管理功能。

整合Security依赖后默认效果

引入Security启动器后,不需要任何配置,自动提供登录认证功能默认情况下,除了/login能够正常访问,访问系统其他任意资源时,都需要登录认证

security默认提供了用户名和密码,用户名是user,密码是在控制台中输出的一个UUID字符串

登录成功后,就可以正常访问系统资源如果登录失败,会自动跳转到/login?error,提示用户名和密码错误通过/logout地址可以退出登录,跳转到登录地址/login?logout

实现⾃定义⽤户认证和授权

能够写代码实现⾃定义⽤户认证

能够说出⾃定义⽤户认证运⾏流程

能够说出⾃定义⽤户认证和授权每⼀项配置的作⽤:

复制代码
@Configuration
public class MySecurityConfig {

    // 配置密码加密器 - 使用 BCrypt 算法对密码进行哈希加密
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    // 配置自定义用户认证服务 - 从数据库或其他源加载用户信息
    @Bean
    public UserDetailsService userDetailsService() {
        return new MyUserDetailsService();
    }

    // 通过 SecurityFilterChain 实现自定义用户认证和授权配置
    @Bean
    SecurityFilterChain filterChain(HttpSecurity security) throws Exception {
        // 自定义表单登录配置
        security.formLogin(configurer -> {
            configurer
                .loginPage("/user/login")             // 指定自定义登录页面 URL
                .loginProcessingUrl("/user/login")    // 处理登录请求的 URL
                .usernameParameter("uname")           // 用户名参数名(默认是 username)
                .passwordParameter("pwd")             // 密码参数名(默认是 password)
                .defaultSuccessUrl("/user/main")      // 登录成功后跳转的 URL
                .failureForwardUrl("/user/loginFail"); // 登录失败后跳转的 URL
        });

        // 配置用户注销功能
        security.logout(configurer -> {
            configurer.logoutUrl("/user/logout");  // 注销请求的 URL
        });

        // 配置 URL 访问权限控制
        security.authorizeHttpRequests(registry -> {
            registry
                .requestMatchers(                     // 无需认证即可访问的资源
                    "/login",
                    "/user/login",
                    "/css/**",                      // 静态资源放行
                    "/img/**",
                    "/user/loginFail"
                ).permitAll()
                .requestMatchers("/user/**").hasAnyRole("common", "vip", "manager") // user 路径需 common、vip 或 manager 角色
                .requestMatchers("/vip/**").hasAnyRole("vip", "manager")           // vip 路径需 vip 或 manager 角色
                .requestMatchers("/manager/**").hasRole("manager")                 // manager 路径需 manager 角色
                .anyRequest().authenticated();                                   // 其他请求都需要认证
        });

        // 配置"记住我"功能 - 使用 cookie 实现自动登录
        security.rememberMe(configurer -> {
            configurer
                .key("uniqueAndSecret")               // 用于生成 remember-me 令牌的密钥
                .tokenValiditySeconds(86400);         // 令牌有效期(秒),这里设置为 1 天
        });

        // 配置权限不足时的跳转页面
        security.exceptionHandling(configurer -> {
            configurer.accessDeniedPage("/user/noauth"); // 访问被拒绝时跳转的 URL
        });

        // 关闭 CSRF 防护(开发环境常用,生产环境建议保留并配置)
        security.csrf(configurer -> {
            configurer.disable();
        });

        return security.build();
    }
}

CSRF防护

概念

CSRF(Cross-site request forgery):跨站请求伪造

CSRF攻击可以在受害者毫不知情的情况下以受害者的名义伪造恶意请求发送给攻击页面,从而在用户未授权的情况下执行权限保护下的操作,从而造成受害者私密信息泄露以及财产损失。

Security实现CSRF防护

整合SpringSecurity安全框架后,项目默认启用了CSRF安全防护功能,项目中所有涉及到数据修改方式的请求(POST、PUT、DELETE)都会被拦截,这些请求中都需要携带token参数才能正常访问资源。

SpringBoot整合RabbitMQ消息服务

消息服务概念和作⽤

RabbitMQ是由erlang语言开发的,基于AMQP(AdvancedMessageQueueProtocol)协议实现的的轻量级、可靠、可伸缩和可移植的消息队列产品。

在多数应用尤其是分布式系统中,消息服务是不可或缺的重要部分,它使用起来比较简单,同时解决了不少难题,例如异步处理、应用解耦、流量削锋等,使用消息服务可以实现一个高性能、高可用、高扩展的系统。

RabbitMQ⼯作原理

能够说出RabbitMQ运⾏中有哪些组件,每个组件有什么作⽤,组件之间是如何处理消息的

1. Broker
  • 角色:RabbitMQ 服务器实例,负责接收、存储和转发消息
  • 作用
    • 管理所有客户端连接(Connection)和信道(Channel)
    • 维护 Exchange、Queue、Binding 等实体的生命周期
    • 实现消息持久化、集群同步、故障恢复等机制
2. Producer(生产者)
  • 角色:发送消息的应用程序
  • 作用
    • 将消息封装为 AMQP 格式(包含路由键、消息体等)
    • 通过 Channel 发送至指定的 Exchange
    • 支持消息确认(Publisher Confirm)和事务机制
3. Consumer(消费者)
  • 角色:接收并处理消息的应用程序
  • 作用
    • 从 Queue 中拉取或订阅消息
    • 处理消息业务逻辑
    • 支持消息确认(Consumer Acknowledgement)机制
4. Exchange(交换机)
  • 角色:消息路由的核心组件
  • 作用
    • 根据消息的路由键(Routing Key)和 Binding 规则决定消息去向
    • 不存储消息,仅负责路由逻辑
    • 类型
      • Direct:严格匹配路由键(一对一路由)
      • Fanout:广播至所有绑定队列(无视路由键)
      • Topic:基于通配符匹配路由键(灵活多对多路由)
      • Headers:基于消息头属性匹配(较少使用)
5. Queue(队列)
  • 角色:消息存储容器
  • 作用
    • 持久化存储未被消费的消息
    • 支持消息排序、优先级、过期时间等配置
    • 与消费者建立订阅关系,提供消息拉取接口
6. Binding(绑定)
  • 角色:连接 Exchange 和 Queue 的规则
  • 作用
    • 定义 Exchange 路由消息到 Queue 的条件
    • 对于 Direct Exchange,Binding 键等于路由键时匹配
    • 对于 Topic Exchange,Binding 键支持 *(单个单词)和 #(多个单词)通配符
7. Virtual Host(虚拟主机)
  • 角色:逻辑隔离单元
  • 作用
    • 将 Exchange、Queue、用户等资源分组隔离
    • 支持多租户环境,不同 Virtual Host 之间资源完全隔离
    • 每个 Virtual Host 拥有独立的权限控制
8. Connection & Channel(连接与信道)
  • Connection
    • 客户端与 Broker 的 TCP 长连接
    • 维护心跳机制,保证连接存活
  • Channel
    • 建立在 Connection 之上的逻辑信道
    • 所有消息操作(发送、接收、确认)都通过 Channel 执行
    • 复用 Connection 资源,减少系统开销

RabbitMQ的5种⼯作模式

能够列举出前4种⼯作模式并说出每种⼯作模式的特点

能够说出每种⼯作模式需要的交换器类型

1. Work Queues(工作队列模式)

  • 特点
    多个消费者竞争消费同一个队列里的消息,消息一旦被某个消费者获取并确认,就从队列移除,实现任务的 "负载均衡" 分发;生产者发送消息到队列,无需显式指定交换器(默认用 Direct 交换器 ),适合处理 "任务分割" 类场景,比如多个 worker 进程处理批量任务。
  • 交换器类型:默认使用 Direct 交换器(可不显式声明,依赖 RabbitMQ 默认交换器 ),也可显式用 Direct 交换器,路由规则简单,按队列名称精准路由。

2. Publish/Subscribe(发布订阅模式)

  • 特点
    生产者发消息到 Fanout 交换器,交换器会把消息广播到所有与之绑定的队列,每个绑定队列都能收到全量消息;常用来实现 "一对多广播",比如系统通知,所有订阅通知的服务都要收到消息 。
  • 交换器类型:必须用 Fanout 交换器,它无视路由键,只负责把消息广播给绑定队列。

3. Routing(路由模式)

  • 特点
    生产者发送消息时携带明确路由键(routing key),交换器根据路由键,精准匹配绑定键(binding key),只有队列绑定键和消息路由键完全一致时,队列才能收到消息;实现 "按规则精准路由",像按日志级别(error、info 等)区分不同处理队列 。
  • 交换器类型:使用 Direct 交换器,基于路由键与绑定键的精准匹配完成消息路由。

4. Topics(通配符模式)

  • 特点
    路由键和绑定键支持通配符,* 匹配一个单词、# 匹配零个或多个单词(以 . 分隔路由键片段 ),能实现更灵活的 "模糊匹配" 路由;比如按多级分类(如 user.register.success )分发消息,让不同服务订阅不同分类规则 。
  • 交换器类型:采用 Topic 交换器,借助通配符路由键实现复杂灵活的消息路由逻辑。

5. RPC(远程过程调用模式)

  • 特点
    基于 RabbitMQ 实现类似 RPC 的同步调用,客户端发请求消息到队列,服务端消费消息处理后,再把响应消息发回给客户端指定的 "回调队列";需额外处理请求 - 响应的关联、超时等逻辑,把消息队列用于同步调用场景 。
  • 交换器类型:无固定交换器类型,常结合 Direct 交换器,路由规则按需设计(比如按服务标识、方法名等做路由键 ),核心是实现请求与响应的双向通信流程。

SpringCloud微服务

微服务特点

SpringCloud微服务组件

能够说出SpringCloud包含哪些组件以及每个组件的作⽤

一、服务发现组件

用于让微服务之间能自动找到彼此,实现服务的动态调用,典型的有:

  • Eureka
    • 作用:Netflix 开发的服务发现框架,服务提供者把自身信息(如服务名、IP、端口)注册到 Eureka Server;消费者从 Eureka Server 拉取服务列表,结合负载均衡选择服务实例调用;还具备服务健康检查,提供者定期发心跳,超时未发则标记为不可用 。
    • 特点:基于 REST 实现,注重高可用(AP 模式),适合 AWS 等场景,不过 Netflix 部分组件已进入维护模式 。
  • Nacos
    • 作用:阿里开源,集服务发现、配置管理于一体。支持 DNS 和 RPC 服务发现,提供者通过 REST 注册服务元数据;客户端定时心跳保活,消费者拉取服务清单并本地缓存,还能接收服务端主动推送的实例变化 。
    • 特点:默认 AP 模式,支持非临时实例(转为 CP 模式,服务端主动探测实例存活),在国内生态适配好,功能更丰富 。
  • Consul
    • 作用:HashiCorp 推出,支持 DNS 和 HTTP 服务发现方式,由客户端和服务端组成。能实现服务注册、健康检查,还可进行服务配置管理,保障服务可用性与发现的准确性 。
    • 特点:支持多数据中心,CP 模式保障强一致性,适用于对数据一致性要求高的场景 。

二、负载均衡组件

解决多个服务实例间的请求分配,提升系统吞吐量与可用性:

  • Ribbon
    • 作用:客户端负载均衡器,配合 Eureka 等使用,从服务列表中按策略(如简单轮询、权重、随机等 )选实例,分散请求压力 。
    • 现状 :逐渐被替代,新版本 Nacos 默认用 Spring Cloud LoadBalancer ,但 OpenFeign 早期默认集成它 。
  • Spring Cloud LoadBalancer
    • 作用:Spring Cloud 官方替代 Ribbon 的负载均衡组件,提供多种负载均衡策略,与服务发现集成,支持自定义策略,适配新的微服务生态 。

三、服务调用与远程通信组件

实现微服务间的远程调用,让服务像本地调用一样便捷:

  • OpenFeign
    • 作用 :基于 Ribbon(或 Spring Cloud LoadBalancer )和 Hystrix(可集成),通过声明式接口定义(类似本地接口),自动实现 HTTP 远程调用,简化服务间调用代码编写 。比如定义 @FeignClient 接口,指定服务名,就能像调本地方法一样调其他服务接口 。

四、服务容错组件

防止单个服务故障引发整个系统雪崩,保障系统稳定性:

  • Hystrix
    • 作用:Netflix 开发,实现服务熔断、降级、隔离。当服务请求失败率过高(如 10 秒内超 50% ),触发熔断,暂时拒绝请求;降级则是当服务异常时,执行 fallback 逻辑返回默认内容;通过线程池、信号量隔离,避免故障扩散 。
    • 现状:进入维护模式,后续可由 Sentinel 等替代 。
  • Sentinel
    • 作用:阿里开源,提供流控、熔断、降级、系统负载保护等功能。基于资源维度管理,可配置不同规则(如 QPS 限流、异常比例熔断 ),实时监控服务状态,更灵活应对微服务容错场景 。

五、配置管理组件

统一管理微服务配置,支持配置动态更新:

  • Spring Cloud Config
    • 作用:集中管理配置文件,分为服务端(存储配置,如 Git 仓库 )和客户端(微服务拉取配置 )。支持多环境配置,配置更新后可触发客户端刷新 。
  • Nacos 配置中心
    • 作用:Nacos 除服务发现外,兼具配置管理能力。支持配置的动态发布、监听,能在配置变更时,实时推送给微服务,无需重启应用,使用更便捷 。

六、API 网关组件

作为系统统一入口,管理微服务请求路由、过滤等:

  • Zuul
    • 作用:Netflix 开发的网关,可实现请求路由(将不同路径请求转发到对应微服务 )、过滤(如鉴权、日志记录、限流 ),早期用于 Spring Cloud 网关场景 。
    • 现状:Zuul 1 进入维护,Zuul 2 因性能等问题,Spring Cloud 生态逐渐转向 Gateway 。
  • Spring Cloud Gateway
    • 作用:Spring 官方网关,基于 WebFlux 实现响应式编程,支持路由断言(匹配请求条件 )、过滤器(处理请求、响应 ),能实现动态路由、限流、熔断等,性能更优,适配云原生场景 。

Eureka注册中⼼⼯作原理

LoadBalancer负载均衡⼯作原理

一、LoadBalancer 组件作用

在 Spring Cloud 微服务体系里,LoadBalancer 是负载均衡组件 ,核心作用是 让客户端请求 "合理分配" 到多个服务实例,避免单个实例压力过大,提升系统整体吞吐量、可用性与稳定性,主要体现在:

  • 流量分发:把客户端发起的请求(如订单服务调用商品服务),分散到多个商品服务实例,实现 "负载均衡",防止某实例因请求过多崩溃。
  • 服务调用适配:配合服务发现(如 Eureka、Nacos ),自动获取服务的多实例列表,基于策略选实例调用,让微服务调用更 "智能"。
  • 高可用保障:结合实例健康检查(需配合服务发现或额外机制),优先选健康实例,规避故障实例,减少调用失败,增强系统容错。
相关推荐
真实的菜1 小时前
适配器模式:接口转换的神奇魔法[特殊字符],让不兼容的类和谐共处!
java·适配器模式
GettingReal1 小时前
Python 构建壳来启动加密的 SpringBoot Jar 包,增加反编译难度
spring boot·python·jar·加密
骚戴1 小时前
SpringBoot源码解析(十五):spring-boot-autoconfigure.jar的模块化设计
java
YuTaoShao1 小时前
Java八股文——计算机网络「应用层篇」
java·网络·计算机网络
Mryan20052 小时前
Android 应用多语言与系统语言偏好设置指南
android·java·国际化·android-studio·多语言
鲁Q同志3 小时前
若依导出模板时设置动态excel下拉框(表连接的)
java·excel
2025学习3 小时前
Spring循环依赖导致Bean无法正确初始化
后端
l0sgAi3 小时前
最新SpringAI 1.0.0正式版-实现流式对话应用
后端
parade岁月3 小时前
从浏览器存储到web项目中鉴权的简单分析
前端·后端
汇匠源3 小时前
Java 零工市场小程序 | 灵活就业平台 | 智能匹配 | 日结薪系统 | 用工一站式解决方案
java·小程序