下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 17 | 如何实现统一异常处理?
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Spring Boot与Kubernetes云原生微服务实践

共94讲 · 约900分钟
4742
免费
01 | 课程介绍
免费
02 | 背景说明
免费
03 | 课程目标和主要内容
免费
04 | 课程案例需求
免费
05 | 课程补充说明
免费
06 | 为何采用微服务架构?
免费
07 | 架构设计和技术栈选型
08 | 数据和接口模型设计:账户...
09 | 数据和接口模型设计:业务...
10 | Dubbo、Spring Cloud和Ku...
11 | Dubbo、Spring Cloud和Ku...
12 | Dubbo、Spring Cloud和Ku...
13 | 技术中台到底讲什么?
14 | Staffjoy项目结构组织
15 | 谷歌为何采用单体仓库(Mo...
16 | 微服务接口参数校验为何重...
17 | 如何实现统一异常处理?
18 | DTO和DMO为什么要互转?
19 | 如何实现基于Feign的强类...
20 | 为什么框架层就要考虑分环...
21 | 异步处理为何要复制线程上...
22 | 为你的接口添加Swagger文...
23 | 主流微服务框架概览
24 | 网关和BFF是如何演化出来...
25 | 网关和BFF是如何演化出来...
26 | 网关和反向代理是什么关系...
27 | 网关需要分集群部署吗?
28 | 如何设计一个最简网关?
29 | Faraday网关代码解析(上...
30 | Faraday网关代码解析(下...
31 | 生产级网关需要考虑哪些环...
32 | 主流开源网关概览
33 | 安全认证架构演进:单块阶...
34 | 安全认证架构演进:单块阶...
35 | 安全认证架构演进:微服务...
36 | 基于JWT令牌的安全认证架...
37 | JWT的原理是什么?
38 | JWT有哪两种主要流程?
39 | Staffjoy安全认证架构和S...
40 | 用户认证代码剖析
41 | 服务调用鉴权代码剖析
42 | 如何设计用户角色鉴权?
43 | Spring Boot微服务测试该...
44 | 什么是契约驱动测试?
45 | 什么是测试金字塔?
46 | 单元测试案例分析
47 | 集成测试案例分析
48 | 组件测试案例分析
49 | Mock vs Spy
50 | 何谓生产就绪(Production...
51 | Spring Boot如何实现分环...
52 | Apollo vs SpringCloudC...
53 | CAT vs Zipkin vs Sk...
54 | CAT vs Zipkin vs Sk...
55 | 结构化日志和业务审计日志
56 | 集中异常监控和Sentry
57 | EFK & Prometheus &...
58 | 本地开发部署架构和软件需...
59 | 手工服务部署和测试(上)
60 | 手工服务部署和测试(中)
61 | 手工服务部署和测试(下)
62 | SkyWalking调用链监控实...
63 | Docker和Docker Compose...
64 | 容器镜像构建Dockerfile解...
65 | Docker Compose服务部署...
66 | 将Staffjoy部署到本地Doc...
67 | 将Staffjoy部署到本地Doc...
68 | 到底什么是云原生架构?
69 | Kubernetes背景和架构
70 | Kubernetes有哪些基本概念...
71 | Kubernetes有哪些基本概念...
72 | 理解Kubernetes节点网络和...
73 | 深入理解Service和Service...
74 | NodePort vs LoadBalanc...
75 | 本地测试Kubernetes部署文...
76 | 本地测试Kubernetes环境搭...
77 | 将Staffjoy部署到本地Kub...
78 | 将Staffjoy部署到本地Kub...
79 | 生产环境Kubernetes部署文...
80 | 阿里云Kubernetes环境创建
81 | 将Staffjoy部署到阿里云K...
82 | Kubernetes应用动态配置实...
83 | Kubernetes应用金丝雀发布...
84 | 阿里云资源释放
85 | 课程复盘
86 | 项目扩展和应用
87 | Account服务
88 | Company服务
89 | Mail、SMS和Bot服务
90 | Faraday服务
91 | WhoAmI服务
92 | WWW服务
93 | 前端应用
94 | 结束语

精选留言(9)

  • 2019-11-20
    老师,微服务异常设计这块,您有什么好的实践么?
    1. 比如,异常的分类,有的人归结为:业务异常,系统异常,代码异常 三类,您怎么看?
    2. 有时候,我们需要针对某一种特殊异常进行数据回滚处理,此时就得用特殊异常了,比如:微服务A调用了微服务B,微服务B可能会出现各种异常,但我只需要针对其中某一种或几种异常进行数据回滚操作(即要重新调用微服务B的反向API),此时异常分类又不一样了,只是3类肯定不行。
    我用的暂时是mongoDB,事务不要求强一致性。

    所以,我在想是不是统一返回给的web前端的异常,设计成3类就行,而微服务之间则需要按照具体需要进行设计。还望老师解答下,谢谢了。
    展开

    作者回复: 我之前设计框架的时候,一般只设计两类异常,一类是框架异常(或者你说的系统异常),另一类是业务异常(业务开发自己定制扩展)。

    异常种类不需要太多,但是错误码(error code)和错误消息(error message)可以按需定义。你提到的回滚操作可以根据错误码判断。

  • 2019-10-23
    杨老师,我有2个疑问,关于Staffjoy中的ServiceException,
    1. 我理解是异常的基类,如果业务模块自定义的异常,应该就是继承这个ServiceException这个基类就可以了对吧?我这个理解是否有问题?
    2. 为什么是继承RuntimeExcetption类,而不是直接继承Exception类?

    作者回复: 你好,因为Staffjoy是一个简单教学案例,所以:

    1. 服务层的异常统一包装成ServiceException,里头有error code和message等关键信息就够了,暂时也没有必要再继承。

    2. 继承RuntimeException就不用麻烦手动捕获,可以集中让Spring ControllerAdvice异常机制统一捕获。

    当然,这个只是我个人做法,对于异常的使用,不同的人有不同的风格,所以你也可以按需采用你自己的风格。

  • 2019-10-14
    老师,统一异常处理是写在common-lib里面的,但是web-app通过dependency的方式引入之后,在怎么把common-lib里面的异常处理类实例化的?

    作者回复: 统一异常处理用了Spring的RestControllerAdvice机制(可以网上找下,相关文档很多),相关类GlobalExceptionTranslator在common-lib中,其它Spring应用只要能类扫描到并加载这个GlobalExceptionTranslator,就可以实现统一异常处理。

    在其它Spring应用中,框架异常或者你自己定义的异常,向外抛出时,最终会被这个RestControllerAdvice所捕获,并做统一处理。

  • 2019-09-24
    请问老师,视频里全局格式化BaseResponse Json格式的地方在哪个地方了?因为按照您视频里的例子,我这边返回BaseResponse后,Json格式有点小问题

    作者回复: 从你描述我没有看出具体什么问题,可以加我微信(bulldog2015,说明来自极客时间),进一步了解细节。

  • 2019-07-31
    我也做了统一异常处理,但是对于sql执行时的错误,会直接反馈的页面sql乱码,而不是友好提示,不知道怎么处理

    作者回复: 你可以在ControllerAdvice里头对SQL相关类型的异常单独捕获和转换处理一下,给用户一个友好的提示。

  • 2019-07-24
    mvc的可以使用@ControllerAdvice注解,和@RestControllerAdvice类似的

    作者回复: 是的,谢谢提醒!

  • 2019-07-21
    老师,虽然统一异常处理能让开发人员专注于业务,任何不符合业务规范的地方都通过异常往外throw,这样容易让开发人员乱throw异常,而创建异常本身是比较好性能的,而且统一异常是通过aop实现的,在项目比较小的时候可能对业务没啥影响,但是在高并发,大业务量场景下是不是也能使用统一异常处理,我团队内部对此进行了讨论,但是没有结果(目前项目的业务量不大,使用的是统一异常处理),能否请老师告知下,像一些一线大厂(阿里,字节跳动),在高并发场景下是如何处理异常的

    作者回复: 你好,统一异常处理属于微服务治理的重要环节,不管公司规模大小,并发量多大,都要做。我之前在eBay这种大厂工作过,它的交易量非常大,但它的框架层和业务层错误处理做得非常细致,反倒是一些中小公司常常忽略异常处理。异常处理发生时的确有一定的性能损耗,但是这个是必须的,而且生产级代码是建议尽可能细致全面的做错误处理,目前没有证据显示,细粒度的错误处理会引发性能问题。另外,很多大厂的服务框架都有统一异常处理逻辑,统一异常处理有利于规范和后续的运维。

    1
  • 2019-07-21
    希望老师阐述关于架构设计方面的实践经验,代码层面不易过细,代码入门大可以看其他教程,因为第二次更新明显感觉不如前10课干货多

    作者回复: 你好,第二章本身就是关于框架设计的,偏代码层次较多。后续课程大部分都是架构原理+代码分析结合,大致一半一半的比例。最后几章偏实际操作容器部署为主。谢谢继续关注我的课程!

  • 2019-07-19
    请问一下老师过滤器怎样进行统一异常处理

    作者回复: 你指的是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)