Spring Boot 与 Kubernetes 云原生微服务实践
杨波
前携程 / 拍拍贷技术总监,微服务技术专家
28227 人已学习
新⼈⾸单¥98
课程目录
已完结/共 94 讲
第一章:课程介绍和案例需求 (5讲)
第十章:项⽬复盘、应用和扩展环节 (2讲)
第十一章:附录 Staffjoy 项目源代码解析 (8讲)
时长 14:53
时长 10:29
时长 10:52
时长 05:09
时长 15:06
时长 16:17
Spring Boot 与 Kubernetes 云原生微服务实践
登录|注册
留言
13
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 17 | 如何实现统一异常处理?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 背景说明
03 | 课程目标和主要内容
04 | 课程案例需求
05 | 课程补充说明
06 | 为何采用微服务架构?
07 | 架构设计和技术栈选型
08 | 数据和接口模型设计:账户服务
09 | 数据和接口模型设计:业务服务
10 | Dubbo、Spring Cloud和Kubernetes该如何选型(上)
11 | Dubbo、Spring Cloud和Kubernetes该如何选型(中)
12 | Dubbo、Spring Cloud和Kubernetes该如何选型(下)
13 | 技术中台到底讲什么?
14 | Staffjoy项目结构组织
15 | 谷歌为何采用单体仓库(Mono-Repo)?
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安全认证架构和SSO
40 | 用户认证代码剖析
41 | 服务调用鉴权代码剖析
42 | 如何设计用户角色鉴权?
43 | Spring Boot微服务测试该如何分类?
44 | 什么是契约驱动测试?
45 | 什么是测试金字塔?
46 | 单元测试案例分析
47 | 集成测试案例分析
48 | 组件测试案例分析
49 | Mock vs Spy
50 | 何谓生产就绪(Production Ready)?
51 | Spring Boot如何实现分环境配置
52 | Apollo vs SpringCloudConfig vs K8s ConfigMap
53 | CAT vs Zipkin vs Skywalking(上)
54 | CAT vs Zipkin vs Skywalking(下)
55 | 结构化日志和业务审计日志
56 | 集中异常监控和Sentry
57 | EFK & Prometheus & Skywalking + Kubernetes 集成架构
58 | 本地开发部署架构和软件需求
59 | 手工服务部署和测试(上)
60 | 手工服务部署和测试(中)
61 | 手工服务部署和测试(下)
62 | SkyWalking调用链监控实验
63 | Docker和Docker Compose简介
64 | 容器镜像构建Dockerfile解析
65 | Docker Compose服务部署文件剖析
66 | 将Staffjoy部署到本地Docker Compose环境(上)
67 | 将Staffjoy部署到本地Docker Compose环境(下)
68 | 到底什么是云原生架构?
69 | Kubernetes背景和架构
70 | Kubernetes有哪些基本概念(上)
71 | Kubernetes有哪些基本概念(下)
72 | 理解Kubernetes节点网络和Pod网络
73 | 深入理解Service和ServiceDiscovery
74 | NodePort vs LoadBalancer vs Ingress
75 | 本地测试Kubernetes部署文件剖析
76 | 本地测试Kubernetes环境搭建
77 | 将Staffjoy部署到本地Kubernetes环境(上)
78 | 将Staffjoy部署到本地Kubernetes环境(下)
79 | 生产环境Kubernetes部署文件剖析
80 | 阿里云Kubernetes环境创建
81 | 将Staffjoy部署到阿里云Kubernetes环境
82 | Kubernetes应用动态配置实验
83 | Kubernetes应用金丝雀发布实验
84 | 阿里云资源释放
85 | 课程复盘
86 | 项目扩展和应用
87 | Account服务
88 | Company服务
89 | Mail、SMS和Bot服务
90 | Faraday服务
91 | WhoAmI服务
92 | WWW服务
93 | 前端应用
94 | 结课测试&结束语
登录 后留言

全部留言(13)

  • 最新
  • 精选
彬清
老师,微服务内部调用feign接口抛出的异常,如何统一处理,需要捕获什么类型的异常?

作者回复: 初步网上查了一下,一种统一处理feign接口异常的方法是:用RestControllerAdvice集中捕获和处理FeignException 参考: https://stackoverflow.com/questions/55020389/spring-feign-client-exception-handling https://www.javacodemonk.com/feign-exception-handling-spring-cloud-20d17f69 异常一般可以分为两类: 1. 底层http通讯异常,比如连不上或超时等 2. 服务端返回http错误码异常。 具体要根据应用场景分析。

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

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

2019-07-21
2
3
Demon.Lee
老师,微服务异常设计这块,您有什么好的实践么? 1. 比如,异常的分类,有的人归结为:业务异常,系统异常,代码异常 三类,您怎么看? 2. 有时候,我们需要针对某一种特殊异常进行数据回滚处理,此时就得用特殊异常了,比如:微服务A调用了微服务B,微服务B可能会出现各种异常,但我只需要针对其中某一种或几种异常进行数据回滚操作(即要重新调用微服务B的反向API),此时异常分类又不一样了,只是3类肯定不行。 我用的暂时是mongoDB,事务不要求强一致性。 所以,我在想是不是统一返回给的web前端的异常,设计成3类就行,而微服务之间则需要按照具体需要进行设计。还望老师解答下,谢谢了。

作者回复: 我之前设计框架的时候,一般只设计两类异常,一类是框架异常(或者你说的系统异常),另一类是业务异常(业务开发自己定制扩展)。 异常种类不需要太多,但是错误码(error code)和错误消息(error message)可以按需定义。你提到的回滚操作可以根据错误码判断。

2019-11-20
2
💢 星星💢
web端的参数校验,例如JSR参数校验注解,例如@notblank @vaild ,课程里的统一异常实现ErrorController,通过Object exception = request.getAttribute(RequestDispatcher.ERROR_EXCEPTION); 也能捕获到么?没有实践过。就直接问问老师嘿嘿。

作者回复: 这个取决于Controller方法会不会抛异常。我简单查了一下: https://stackoverflow.com/questions/22003011/spring-mvc-validation-exceptionhandler-invoked-before-controller-method 如果Controller方法中不带BindingResult参数,那么验证失败就会抛出异常,抛出异常的话ErrorController可以统一捕获。 如果Controller方法中带BindingResult参数,那么就不会抛异常,当然ErrorController也就捕获不到。 具体可以做个简单例子尝试一下。

2020-08-26
2
1
Fchen
mvc的可以使用@ControllerAdvice注解,和@RestControllerAdvice类似的

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

2019-07-24
1
统一异常处理,web端重要性相对弱一点,微服务层怎么统一处理呢?每个接口情况一般差异较大,也是只需两种嘛?框架异常+业务异常,通过封装异常对象来统一响应?

作者回复: 微服务层统一异常处理可以做到,可参考我的案例代码,可以做得粒度较细,也可以比较粗,具体看业务需要。

2020-03-16
旭东(Frank)
前端vue 就更好了

作者回复: 课程的重点是微服务和云原生架构,微服务/云原生架构和具体前端(vue/reactjs/angularjs)无关,课程以reactjs为例只是演示。

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

作者回复: 你好,因为Staffjoy是一个简单教学案例,所以: 1. 服务层的异常统一包装成ServiceException,里头有error code和message等关键信息就够了,暂时也没有必要再继承。 2. 继承RuntimeException就不用麻烦手动捕获,可以集中让Spring ControllerAdvice异常机制统一捕获。 当然,这个只是我个人做法,对于异常的使用,不同的人有不同的风格,所以你也可以按需采用你自己的风格。

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

作者回复: 统一异常处理用了Spring的RestControllerAdvice机制(可以网上找下,相关文档很多),相关类GlobalExceptionTranslator在common-lib中,其它Spring应用只要能类扫描到并加载这个GlobalExceptionTranslator,就可以实现统一异常处理。 在其它Spring应用中,框架异常或者你自己定义的异常,向外抛出时,最终会被这个RestControllerAdvice所捕获,并做统一处理。

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

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

2019-09-24
收起评论