今日工作

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 降级日志输出正常