今日工作

1. Admin 控制器合并重构

mall-admin 的 controller 层从 15 个砍到了 7 个。

删了 8 个——4 个 internal 控制器(UserInternalControllerRoleInternalControllerDeptInternalControllerJobInternalController),4 个关联表控制器(UserRoleControllerRoleMenuControllerRoleDeptControllerUserAvatarController)。

理由很简单:internal 控制器的方法本来就是对同一张表查数据,合并到 UserControllerRoleControllerJobController 就够了。关联表控制器纯 CRUD,也没人调,留它过年。

UserFeignClient 的请求路径也顺手从 /v1/internal/user/* 改到了 /v1/auth/user/*,因为 internal 路径已经不存在了。

2. Swagger 描述统一

之前 @Operation(summary = "通过id查询")@Operation(description = "删除") 这种写了等于没写。

这次给 6 个 Controller 的每个接口都加了三段式描述——认证要求 + 参数说明 + 业务说明

需 Bearer Token + admin 角色 | 查询参数:id(用户ID)
无需认证(公开接口)| 无参,返回全部角色列表
需 Bearer Token | 请求体:RoleConditionEntity(分页条件)

顺便把白名单逻辑的现状写进了 Security 注释,哪些接口免登录一目了然。

3. Feign 熔断降级体系

这是今天的大头。项目之前 Feign 调用异常处理几乎裸奔——FeignResultDecoder 的核心逻辑被人注释掉了,没有 ErrorDecoder、没有 FallbackFactory、没有断路器。

三层补齐:

flowchart LR
    A["Feign 调用"] --> B["CircuitBreaker\nresilience4j"]
    B --> C["ErrorDecoder\nHTTP 异常→业务异常"]
    C --> D["FallbackFactory\n降级兜底值"]

ErrorDecoder(common-web): 4xx → BusinessException(不重试),5xx → RetryableException(触发 resilience4j 重试)。全局生效,所有服务都能吃到。

FallbackFactory(各 client 模块): 给 8 个关键 FeignClient 配了降级实现——UserFeignClientOrderFeignClientProductFeignClientDictFeignClientSmsFeignClient 等。降级时返回 null/空列表/0,避免级联故障。

Nacos 配置(文档已产出,待写入): 写了 docs/31-Resilience4j-Nacos配置指南.md,分 C 端高流量(product / order / pay / mobile-bff)和 B 端管理(admin / basic / message 等)两套方案:

  • C 端:快速熔断(窗口 10 / 阈值 50%),可加限流
  • B 端:保守熔断(窗口 20 / 阈值 70%),超时更宽松

4. 测试脚本 & 接口验证

script/admin-api-test.sh 更新后跑了一遍——20 个接口全绿通过 ✅。也确认了旧 internal 路径确实返回 404(新代码正确部署)。

明日计划

  • 把 resilience4j 的 Nacos 配置写入各服务
  • 继续观望有没有其他需要 ErrorDecoder 兜底的 Feign 调用链路
  • 确认 PayFeignClient 是否需要 FallbackFactory(支付链路对降级更敏感)