第 13 章 · Spring Boot 集成:Apollo / Sentinel / 中间件
本章面向 Java / Spring Boot 3 微服务,给出与第 2~5 章 PaaS 组件及 Apollo 配置中心、Sentinel 流量治理 的完整集成语法。
前置:MySQL、Redis、Nacos(可选)、RocketMQ/Kafka 已部署;应用通过 应用部署 → 自定义镜像 发布。
13.1 推荐工程结构
order-service/
├── src/main/java/com/shop/order/
├── src/main/resources/
│ ├── application.yml # 本地默认 + 占位符
│ └── bootstrap.yml # Apollo 等引导配置(可选)
├── Dockerfile
└── pom.xml
Namespace:app;配置类组件在 middleware。
13.2 依赖清单(pom.xml 摘要)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Nacos 注册发现(第 4 章)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- RocketMQ(第 4 章)-->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
</dependency>
<!-- Apollo -->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>2.2.0</version>
</dependency>
<!-- Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>
13.3 Apollo 配置中心 2.2
适用场景
| 选用 | 说明 |
|---|---|
| 配置集中管理 | 数据库连接、开关、限流阈值 |
| 灰度发布 | 按 IP/集群推送不同配置 |
| 与 Nacos 对比 | Apollo 偏配置;Nacos 注册+配置一体 |
商店部署参数
| 项 | 值 |
|---|---|
| id | apollo |
| 镜像 | apolloconfig/apollo-portal:2.2.0 |
| 端口 | 8070(Portal UI) |
| PVC | 10 Gi → /opt/apollo |
| 说明 | 完整 Apollo 还需 ConfigService、AdminService、Meta;单 Portal 适合学习 UI 与客户端协议,生产需按官方补全组件或外接 MySQL |
环境变量(Portal 演示)
env:
- name: SPRING_DATASOURCE_URL
value: "jdbc:mysql://mysql.data.svc.cluster.local:3306/apollo?characterEncoding=utf8"
- name: SPRING_DATASOURCE_USERNAME
value: "apollo"
- name: SPRING_DATASOURCE_PASSWORD
value: "ApolloPass123"
先在 MySQL 执行 Apollo 官方 apolloportaldb.sql 初始化库表。
客户端连接语法
application.yml
app:
id: order-service
apollo:
meta: http://apollo-configservice.middleware.svc.cluster.local:8080
bootstrap:
enabled: true
namespaces: application,order-service.yaml
cache-dir: /tmp/apollo-cache
环境变量方式(Deployment):
env:
- name: APP_ID
value: order-service
- name: APOLLO_META
value: http://apollo.middleware.svc.cluster.local:8070
代码读取:
@Value("${discount.rate:0.1}")
private double discountRate;
验收
Portal 修改 discount.rate → 发布 → 应用日志打印新值(或开启 apollo.autoUpdateInjectedSpringProperties)。
13.4 Sentinel 控制台 1.8.7
适用场景
| 选用 | 说明 |
|---|---|
| 限流 | QPS 超过阈值快速失败 |
| 熔断降级 | 下游慢/错误率升高时熔断 |
| 热点参数 | 针对商品 ID 等参数限流 |
商店部署参数
| 项 | 值 |
|---|---|
| id | sentinel-dashboard |
| 镜像 | bladex/sentinel-dashboard:1.8.7 |
| 端口 | 8858 |
| Namespace | middleware |
应用侧配置
spring:
cloud:
sentinel:
transport:
dashboard: sentinel-dashboard.middleware.svc.cluster.local:8858
port: 8719
eager: true
feign:
sentinel:
enabled: true
环境变量:
env:
- name: JAVA_TOOL_OPTIONS
value: "-Dcsp.sentinel.dashboard.server=sentinel-dashboard.middleware:8858"