作者回复: 课程的重点是微服务和云原生架构,微服务/云原生架构和具体前端(vue/reactjs/angularjs)无关,课程以reactjs为例只是演示。
作者回复: 我之前设计框架的时候,一般只设计两类异常,一类是框架异常(或者你说的系统异常),另一类是业务异常(业务开发自己定制扩展)。
异常种类不需要太多,但是错误码(error code)和错误消息(error message)可以按需定义。你提到的回滚操作可以根据错误码判断。
作者回复: 你好,因为Staffjoy是一个简单教学案例,所以:
1. 服务层的异常统一包装成ServiceException,里头有error code和message等关键信息就够了,暂时也没有必要再继承。
2. 继承RuntimeException就不用麻烦手动捕获,可以集中让Spring ControllerAdvice异常机制统一捕获。
当然,这个只是我个人做法,对于异常的使用,不同的人有不同的风格,所以你也可以按需采用你自己的风格。
作者回复: 统一异常处理用了Spring的RestControllerAdvice机制(可以网上找下,相关文档很多),相关类GlobalExceptionTranslator在common-lib中,其它Spring应用只要能类扫描到并加载这个GlobalExceptionTranslator,就可以实现统一异常处理。
在其它Spring应用中,框架异常或者你自己定义的异常,向外抛出时,最终会被这个RestControllerAdvice所捕获,并做统一处理。
作者回复: 从你描述我没有看出具体什么问题,可以加我微信(bulldog2015,说明来自极客时间),进一步了解细节。
作者回复: 你可以在ControllerAdvice里头对SQL相关类型的异常单独捕获和转换处理一下,给用户一个友好的提示。
作者回复: 是的,谢谢提醒!
作者回复: 你好,统一异常处理属于微服务治理的重要环节,不管公司规模大小,并发量多大,都要做。我之前在eBay这种大厂工作过,它的交易量非常大,但它的框架层和业务层错误处理做得非常细致,反倒是一些中小公司常常忽略异常处理。异常处理发生时的确有一定的性能损耗,但是这个是必须的,而且生产级代码是建议尽可能细致全面的做错误处理,目前没有证据显示,细粒度的错误处理会引发性能问题。另外,很多大厂的服务框架都有统一异常处理逻辑,统一异常处理有利于规范和后续的运维。
作者回复: 你好,第二章本身就是关于框架设计的,偏代码层次较多。后续课程大部分都是架构原理+代码分析结合,大致一半一半的比例。最后几章偏实际操作容器部署为主。谢谢继续关注我的课程!
作者回复: 你指的是Servlet Filter吗?如果是,在Spring中也可以统一异常处理,类似MVC统一异常处理做法,实现ErrorController接口。可以参考staffjoy中的faraday项目GlobalErrorController(https://github.com/spring2go/staffjoy/blob/master/faraday/src/main/java/xyz/staffjoy/faraday/controller/GlobalErrorController.java)