跳到主要内容

统一错误码管理平台设计

目标

  1. 集中管理,本地缓存:错误码由平台统一录入,但SDK必须在本地缓存,绝不能因为错误码平台挂了导致业务服务不可用。
  2. 无侵入性:SDK接入应尽可能简单(Starter方式),对业务代码改动最小。
  3. 多语言(i18n)支持:设计之初就要考虑国际化,不同Locale返回不同Message。
  4. 动态热更新:修改错误文案后,服务无需重启即可生效。

错误码规范设计

推荐格式:A-BB-CCC (例如:1001004)

组成部分长度说明示例
错误来源1位/2位区分错误类型1: 系统级/通用错误 (NPE, DB链接失败)2: 业务级错误 (余额不足)
服务/模块2位/3位对应具体微服务01: 用户服务;02: 订单服务
具体编码3位具体错误场景001: 参数为空;002: 记录不存在

管理平台设计 (The Platform)

管理平台(ErrorCode Center, ECC)负责数据的增删改查和持久化。

数据库设计

CREATE TABLE `error_code` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`app_name` varchar(64) NOT NULL COMMENT '服务名,如 user-service',
`code` varchar(32) NOT NULL COMMENT '错误码,如 201001',
`message` varchar(255) NOT NULL COMMENT '默认错误信息',
`type` varchar(20) DEFAULT 'BIZ' COMMENT '类型:SYS-系统, BIZ-业务',
`severity` varchar(20) DEFAULT 'INFO' COMMENT '严重等级',
`solution` text COMMENT '给开发看的排查建议',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`)
);

sdk设计

通用异常处理

@Data
public class BizException extends RuntimeException {
private String code;
private Object[] args; // 支持动态参数,如 "参数 {0} 不能为空"

public BizException(String code, Object... args) {
this.code = code;
this.args = args;
}

}