今日工作
1. FeignFallbackProxy:用动态代理干掉模板代码
昨天写了 8 个 FallbackFactory,每个 50+ 行,全是 return null / 空列表 / 0 的模板代码。今天抽了个 FeignFallbackProxy 到 common-core,基于 JDK 动态代理,根据方法返回类型自动推断兜底值。
// 改前:14 个方法逐个手写
return new UserFeignClient() {
@Override public List<UserDTO> findByIds(List<Long> ids) {
log.warn("[降级] findByIds 返回空列表");
return Collections.emptyList();
}
// ... 每个方法都来一遍
};
// 改后:一行搞定
return FeignFallbackProxy.create(UserFeignClient.class, cause);
8 个工厂从 ~400 行缩到 ~40 行,核心逻辑全部收敛到 FeignFallbackProxy 一处。以后加新的 FeignClient 降级也只需要 5 行。
2. Nacos 配置统一收敛
之前每个服务在 Nacos 里都有一份独立的 yml,Redis 连接配了 8 遍、JWT 密钥配了 11 遍。花了半天把 common.yaml 重新扶正——所有共享配置(Redis、JWT、devtools、bean-override、Resilience4j)归到 common,各服务只留数据库、中间件等特有配置。
# application.yml 改后
spring:
config:
import:
- nacos:common.yaml?group=mall-cloud # 共享,所有服务继承
- nacos:mall-xxx-api-dev.yaml # 独立,只配特有项
顺带清了 common.yaml 里的死配置——Redisson 排除(项目早没 Redisson 了)、Actuator/Prometheus(从未使用)、YAML 重复 key。
3. resilience4j 配置落地
Nacos 的 common.yaml 已写入:
resilience4j:
circuitbreaker:
configs:
default:
sliding-window-size: 10
failure-rate-threshold: 50
retry:
configs:
default:
max-attempts: 3
wait-duration: 500ms
timelimiter:
configs:
default:
timeout-duration: 5s # BFF 覆盖为 10s
BFF 服务(admin-bff、mobile-bff)因为要聚合多个 Feign 调用,超时放宽到 10s。
4. Nacos 配置指南更新
重写了 docs/18-Nacos配置指南.md,从原来的 “common.yaml 已废弃” 更新为双层配置架构说明 + R4 配置表格 + 新服务接入流程。
5. 杂项
.metadata.yml补全了所有 14 个配置项的服务描述- 各服务 dev yml 清理了冗余的 Redis、JWT、devtools、bean-override 配置
明日计划
- 重启服务验证 R4 配置生效
- 观察日志确认 FeignFallbackProxy 降级日志输出正常