在微服务化的今天,服务间的交互越来越复杂,统一异常处理规范作为框架的基础,一旦上线后很难再更改,如果设计不好,会导致后期的维护成本越来越来大。 对于错误码的设计,不同的开发团队有不同的风格习惯。本文分享作者从实践中总结的经验及对应的思考,期望对读者有所启发。
本文中涉及的源码:https://github.com/sofn/app-engine/tree/master/common-error
什么是错误码
引自阿里巴巴《Java 开发手册》- 异常日志-错误码
错误码的制定原则:快速溯源、简单易记、沟通标准化。
正例:错误码回答的问题是谁的错?错在哪?
1)错误码必须能够快速知晓错误来源,可快速判断是谁的问题。
2)错误码易于记忆和比对(代码中容易 equals)。
3)错误码能够脱离文档和系统平台达到线下轻量化地自由沟通的目的。
那么用Java异常能表示出来吗?答案显然是否定的
- 必须能够快速知晓错误来源:异常类因为复用性不能很快的定位,异常类和代码行数也不是一个稳定的值
- 必须易于记忆和对比:异常类不具有可比性,且不利于前后端交互
- 能够脱离代码沟通:异常类只能存在于Java代码中
错误码设计
错误码的设计是比较简单的,一般只需要定义一个数字和描述信息即可。不过想设计一套完善错误码系统还有很多需要考虑的场景。