文章目录

Java 微服务:Spring Cloud 组件使用

发布于 2026-04-17 02:17:57 · 浏览 27 次 · 评论 0 条

Java 微服务:Spring Cloud 组件使用


构建 微服务架构的核心在于将单体应用拆分为多个独立部署的服务,并通过组件协同工作。以下步骤将详细介绍如何搭建一套基于 Spring Cloud Alibaba 的微服务系统,涵盖服务注册、发现、调用、熔断保护及网关路由。


1. 搭建父工程与基础环境

创建 Maven 项目作为父工程,用于统一管理依赖版本,避免版本冲突。

  1. 新建 文件夹 microservice-parent
  2. 编辑 pom.xml 文件,设置 <packaging>pom
  3. 引入 spring-boot-starter-parentspring-cloud-dependencies 依赖管理。
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.13</version>
</parent>

<properties>
    <java.version>1.8</java.version>
    <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
    <spring-cloud.version>2021.0.5</spring-cloud.version>
</properties>

<dependencyManagement>
    <dependencies>
        <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>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2. 配置服务注册与发现 (Nacos)

微服务之间需要互相找到对方,这由注册中心完成。此处使用 Nacos 作为注册中心。

  1. 下载 Nacos Server 压缩包。
  2. 解压 压缩包至指定目录。
  3. 进入 bin 目录。
  4. 执行 启动命令:
    • Windows: 双击 startup.cmd
    • Linux/Mac: 运行 sh startup.sh -m standalone
  5. 访问 浏览器,输入 http://localhost:8848/nacos使用 账号密码 nacos/nacos 登录 控制台。

创建 服务提供者模块 service-provider

  1. 引入 依赖 spring-cloud-starter-alibaba-nacos-discoveryspring-boot-starter-web
  2. 配置 application.yml 文件,指定 服务名和注册中心地址。
server:
  port: 8001

spring:
  application:
    name: service-provider
  cloud:
    nacos:
      server-addr: localhost:8848
  1. 编写 启动类,添加 注解 @EnableDiscoveryClient
  2. 运行 启动类。
  3. 刷新 Nacos 控制台,确认 服务名 service-provider 出现在服务列表中。

3. 实现服务间远程调用

服务消费者需要调用提供者的接口。使用 OpenFeign 可以像调用本地方法一样调用远程服务。

创建 服务消费者模块 service-consumer

  1. 引入 依赖 spring-cloud-starter-openfeignspring-cloud-starter-alibaba-nacos-discovery
  2. 配置 application.yml
server:
  port: 8002

spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      server-addr: localhost:8848
  1. 在启动类上添加 注解 @EnableFeignClients
  2. 定义 Feign 客户端接口。
@FeignClient(value = "service-provider")
public interface UserClient {
    @GetMapping("/user/{id}")
    String getUserById(@PathVariable("id") Long id);
}
  1. Controller 中 注入 UserClient 接口并 调用 方法。
@RestController
public class ConsumerController {
    @Autowired
    private UserClient userClient;

    @GetMapping("/consume/{id}")
    public String consume(@PathVariable Long id) {
        return userClient.getUserById(id);
    }
}
  1. 启动 消费者服务,访问 http://localhost:8002/consume/1验证 是否成功返回提供者的数据。

4. 引入服务熔断与降级

当某个服务出现故障或响应过慢时,为了防止雪崩效应,需要切断请求或返回默认值。使用 Sentinel 实现这一功能。

  1. service-consumer 模块中 引入 依赖 spring-cloud-starter-alibaba-sentinel
  2. 配置 application.yml开启 Sentinel 控制台。
spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
  1. 下载启动 Sentinel Dashboard(默认端口 8080)。
  2. 访问 http://localhost:8080登录 控制台(默认 sentinel/sentinel)。
  3. 多次访问 消费者接口,刷新 Sentinel 控制台,观察 实时监控数据。
  4. 配置 流控规则:点击 簇点链路找到 /consume/{id} 资源,点击 流控 按钮,设置 单机阈值为 1(QPS),点击 新增
  5. 快速刷新 浏览器请求该接口,验证 是否出现 Blocked by Sentinel (flow limiting) 提示。

实现 自定义降级逻辑:

  1. 修改 Feign 接口,指定 fallback 类。
@FeignClient(value = "service-provider", fallback = UserClientFallback.class)
public interface UserClient {
    // ...
}
  1. 创建 UserClientFallback 类,实现 UserClient 接口,并 添加 @Component 注解。
@Component
public class UserClientFallback implements UserClient {
    @Override
    public String getUserById(Long id) {
        return "服务繁忙,请稍后再试 (降级返回)";
    }
}
  1. 关闭 服务提供者,再次访问 消费者接口,确认 返回降级文字而非报错页面。

5. 搭建网关服务

网关作为系统的统一入口,负责路由转发、鉴权等。使用 Spring Cloud Gateway。

创建 网关模块 service-gateway

  1. 引入 依赖 spring-cloud-starter-gatewayspring-cloud-starter-alibaba-nacos-discovery
  2. 配置 application.yml定义 路由规则。
server:
  port: 9000

spring:
  application:
    name: service-gateway
  cloud:
    nacos:
      server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true # 开启从注册中心动态创建路由的功能
      routes:
        - id: provider_route
          # lb:// 代表 LoadBalance,后面跟服务名
          uri: lb://service-provider
          predicates:
            # 当请求路径包含 /user 时转发
            - Path=/user/**
  1. 启动 网关服务。
  2. 通过 网关访问提供者接口:输入 http://localhost:9000/user/1验证 请求是否被正确转发至 service-provider

6. 组件核心功能对比

下表总结了各组件的核心作用与替代方案,便于根据业务场景选型。

组件分类 核心组件 主要作用 常见替代方案
注册中心 Nacos 服务注册与发现、配置管理 Eureka, Consul, Zookeeper
远程调用 OpenFeign 声明式 HTTP 客户端,简化调用 RestTemplate, Dubbo
熔断限流 Sentinel 流量控制、熔断降级、系统保护 Hystrix (已停止维护), Resilience4j
网关 Gateway 统一入口、路由转发、鉴权过滤 Zuul 1.x, Nginx+Lua

7. 请求流转架构

下图展示了外部请求通过网关进入微服务系统,并由注册中心协调服务调用的完整流程。

graph TD Client["客户端请求"] Gateway["网关服务 Gateway"] Nacos["注册中心 Nacos"] Provider["服务提供者 Provider"] Consumer["服务消费者 Consumer"] Sentinel["Sentinel 监控规则"] Client -->|HTTP 请求| Gateway Gateway -->|查询服务地址| Nacos Nacos -->|返回实例列表| Gateway Gateway -->|负载均衡转发| Consumer Consumer -->|调用接口| Provider Consumer -.->|上报监控数据| Sentinel Sentinel -.->|下发流控/降级规则| Consumer subgraph "微服务集群" Gateway Consumer Provider end subgraph "基础设施" Nacos Sentinel end

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文