前置环境准备
所有依赖版本严格对应,禁止随意修改版本号,否则会出现兼容性问题
1. 基础依赖安装
- JDK17:下载地址 https://cdn.azul.com/zulu/bin/zulu17.44.17-ca-jdk17.0.8-linux_x64.tar.gz,配置环境变量后执行
java -version验证版本为17.x
- Nacos2.2.3:下载地址 https://github.com/alibaba/nacos/releases/tag/2.2.3,Linux执行
tar -zxvf nacos-server-2.2.3.tar.gz && sh bin/startup.sh -m standalone,Windows执行start bin/startup.cmd -m standalone,访问http://localhost:8848/nacos,账号密码均为nacos
- MySQL8.0:下载地址 https://dev.mysql.com/downloads/mysql/8.0.html,初始化执行以下建表脚本:
```sql
CREATE DATABASE IF NOT EXISTS archive DEFAULT CHARSET utf8mb4;
USE archive;
CREATE TABLE `archive_meta` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`archive_code` varchar(64) NOT NULL COMMENT '档案唯一编码',
`archive_name` varchar(128) NOT NULL COMMENT '档案名称',
`archive_type` varchar(32) NOT NULL COMMENT '档案分类',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`creator` bigint NOT NULL COMMENT '创建人ID',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态 1有效 0作废',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_archive_code` (`archive_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='档案元数据表';
CREATE TABLE `sys_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` varchar(32) NOT NULL COMMENT '账号',
`password` varchar(128) NOT NULL COMMENT '密码',
`role` varchar(32) NOT NULL COMMENT '角色',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
```
- Redis7:下载地址 https://redis.io/download/redis-downloads,执行
redis-server启动,默认无密码
微服务模块拆分(可直接复用)
模块职责严格拆分,禁止跨模块写逻辑:
- archive-common:公共依赖包,存放工具类、DTO、常量,无启动端口
- archive-user-service:用户、权限、角色管理,启动端口8001
- archive-meta-service:档案元数据、分类、标签管理,启动端口8002
- archive-storage-service:档案文件上传、预览、存储对接,启动端口8003
- archive-audit-service:档案借阅、审批、操作日志管理,启动端口8004
- archive-gateway:统一网关、权限校验、路由转发,启动端口80
核心配置编写(直接复制可用)
1. 父pom.xml依赖管理
```xml
org.springframework.boot
spring-boot-dependencies
3.1.2
pom
import
org.springframework.cloud
spring-cloud-dependencies
2022.0.3
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2022.0.0.0
pom
import
```
2. 通用bootstrap.yml配置
所有业务服务通用,仅需修改spring.application.name即可:
```yaml
spring:
application:
name: archive-user-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
group: ARCHIVE_GROUP
config:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
file-extension: yaml
group: ARCHIVE_GROUP
```
3. 网关路由配置
在Nacos配置中心新建archive-gateway.yaml配置,写入以下内容:
```yaml
spring:
cloud:
gateway:
routes:
- id: archive-user
uri: lb://archive-user-service
predicates:
- Path=/api/user/
filters:
- StripPrefix=2
- id: archive-meta
uri: lb://archive-meta-service
predicates:
- Path=/api/meta/
filters:
- StripPrefix=2
- id: archive-storage
uri: lb://archive-storage-service
predicates:
- Path=/api/storage/
filters:
- StripPrefix=2
- id: archive-audit
uri: lb://archive-audit-service
predicates:
- Path=/api/audit/
filters:
- StripPrefix=2
```
核心功能实操落地
1. 跨服务调用配置

引入openfeign依赖:
```xml
org.springframework.cloud
spring-cloud-starter-openfeign
```
启动类添加@EnableFeignClients注解,编写调用审计服务的Feign接口:
```java
@FeignClient("archive-audit-service")
public interface AuditFeignClient {
@PostMapping("/log/save")
void saveOperationLog(@RequestBody AuditLogDTO logDTO);
}
```
2. 网关统一权限校验
在archive-gateway模块新增全局过滤器:
```java
@Component
public class AuthFilter implements GlobalFilter, Ordered {
@Override
public Mono
filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String path = exchange.getRequest().getURI().getPath();
// 白名单直接放行
if (path.contains("/user/login")) {
return chain.filter(exchange);
}
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
// 校验token有效性
if (token == null || !JwtUtil.verify(token)) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return -100;
}
}
```
3. 熔断配置
引入Resilience4j依赖,禁用Netflix Hystrix(SpringBoot3不兼容):
```xml
org.springframework.cloud
spring-cloud-starter-circuitbreaker-resilience4j
```
Nacos配置中心新增熔断规则:
```yaml
resilience4j:
circuitbreaker:
instances:
archive-audit:
failure-rate-threshold: 50
minimum-number-of-calls: 10
wait-duration-in-open-state: 5s
permitted-number-of-calls-in-half-open-state: 3
```
可用性验证步骤
- 按顺序启动Nacos、MySQL、Redis,再启动所有业务服务,确认Nacos服务列表中所有服务状态为UP
- 调用
POST http://localhost/api/user/login传入账号密码,获取返回的token
- 请求头携带token调用
POST http://localhost/api/meta传入档案元数据,返回200即代表接口调用成功
- 停止archive-audit-service服务,再次上传档案,接口正常返回,验证熔断生效
- 在Nacos配置中心修改元数据编码校验规则,无需重启服务立即生效,验证配置中心功能正常
常见坑点避坑指南
- Nacos2.2.3默认开启权限校验,必须在bootstrap.yml中配置username和password,否则服务注册失败
- 档案文件不要存储在服务本地,统一对接MinIO,一键部署命令:
docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001",访问http://localhost:9001即可管理存储文件
- 所有操作日志必须异步写入审计服务,禁止同步调用影响主流程性能
- MySQL数据库必须开启binlog,定期备份档案元数据,防止数据丢失