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 云原生微服务实践
登录|注册
留言
25
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 19 | 如何实现基于Feign的强类型接口?
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 | 结课测试&结束语
登录 后留言

全部留言(25)

  • 最新
  • 精选
JerryMen
波波老师,组合大于继承,baseResponse 定义成Response泛型对象不是更好么?里面塞一个<T> data属性,这样不用定义那么多Response了

作者回复: 嗯,原来我认为如果Response用组合方式,由于Java范型的类型擦除问题,Feign会有反序列化问题,后来有学员提出新版的Feign可以正常反序列化组合方式的Response。 后续会开发一个新项目,接口采用组合方式,作为本课程补充,会把项目地址贴在本课程下方评论区。

2019-08-18
2
17
大老李
你好,一般来说,spring feign不是一直被诟病性能差么?用dubbo会不会更好一些

作者回复: 你好,如果说绝对性能,可能feign的确没有dubbo高,但是这个只有在通讯层是瓶颈时才有意义,大部分web应用的瓶颈大都在数据访问层,而不在通讯层。国外Netflix最高峰要承载全美1/3的流量,但是它的微服务通讯层是采用feign的,也没有性能问题一说。另外feign可以灵活装配,使用也简单,社区活跃支持好,这些都是它的亮点,dubbo使用门槛要高一点。当然,这两者没有绝对好坏,都用大规模成功应用场景,没有谁更好一说。

2019-07-19
2
12
永旭
老师, 你好. 实际项目中DTO中包含日期格式字段,导致传输格式不对, 或 时区问题. 在这次项目中用了 Instant 类型的日期, 之前没用过. 此项目是怎么规避这些问题呢 ?

作者回复: 你好,用Instant比较简单,它是一个确定的UTC时间点(自1970零点过去的时间,精确到纳秒)。这个时间可以统一用于业务计算,存储和数据交换。具体展示的时候,可以转换成有时区的和带格式的时间。(An Instant is a moment on the timeline in UTC, a count of nanoseconds since the epoch of the first moment of 1970 UTC. Since most of your business logic, data storage, and data exchange should be in UTC, this is a handy class to be used often.) stackflow上有个贴,讲java时间类的差异和用法,配图,可以参考: https://stackoverflow.com/questions/32437550/whats-the-difference-between-instant-and-localdatetime

2019-07-19
5
Geek_548191
先看了20讲再过来的,波波老师讲课循序渐进,条理清晰,干货很多,感谢!准备先学完这个课程,有需要再去学160讲。感谢!

作者回复: 谢谢支持!加油!

2019-09-30
4
代码里面每次rpc调用就有一个try catch,代码风格是不是略有欠佳?

作者回复: 嗯,可以考虑进一步包装简化,通过引入超类或者AOP等方式。

2020-08-21
2
庄建斌
请问老师。我根据您的项目源码,在采用feign进行服务间调用的时候,如果没有SpringSecurity对Resource进行保护的时候,能够正常使用feignClient进行访问。但一但开启SpringSecurityOauth2.0对Resource进行保护之后,FeignClient进行服务调用,总是会报FeignException,为401。我在网上找解决办法,一直没有找到,请问您有什么好的解决办法么?一方面对资源进行保护,还能实现服务间的通信?

作者回复: 你好,你启用SpringSecurity以后,一些REST API端点的访问会提示未授权,也就是401错误。建议不要用SpringSecurity,如果确实要用,建议在SpringSecurity的安全配置中,将相关REST API排除(permitAll,不要认证即可访问),关于如何配置可以看SpringSecurity文档。 注意,SpringSecurity是单块应用时代的产物,严格讲SpringSecurity安全框架并不适合微服务场景,我们的Staffjoy是微服务应用,有自己的安全处理机制和框架,一般不建议不要混用,除非你非常清除各自的工作原理。

2019-10-16
2
WL
请问一下老师两个问题 1. 强类型的RPC接口是怎么通过契约自动生成服务器端和客户端的, 是采用创建动态代理对象的方式吗? 2. Dubbo是不是就属于强类型的RPC端口.

作者回复: 1. 通过契约生成客户端的做法有很多,可以生成接口+DTO,然后采用动态代理拼装出客户端,我记得以前的jax-ws就是这样生成的;也可以直接生成客户端实现代码+DTO方式,swagger生成的客户端很多采用这种方式。具体可以尝试下grpc的代码生成(https://grpc.io/),或者swagger代码生成(https://editor.swagger.io/),看看它们生成的客户端/服务端长啥样。 2. Dubbo是强类型RPC风格框架,但是它没有契约支持,也没有代码生成,它通过代码库分享实现强类型客户端+服务器端,而且它仅限于Java语言。

2019-07-20
2
Thomas Yang
波波老师请教一下,基于全部是java的微服务架构下内部服务间通信不能过定义保含ResultCode的Response对象来通信而是完全按java的源生数据结构如List<Account>通信,然后通过异常去处理调用方通过Feign捕获自定义异常的ResultCode信息来判断错误类型,这样是不是更简洁一些呢?

作者回复: 我在项目中采用的是payload中稍带错误码的方式,你说的不通过payload稍带,也可以通过http response code等来表达错误信息(然后客户端捕获异常)。 两种实现方式都可以,各有利弊。

2021-01-25
1
龙彦极客
波波老师好, 用openfeign原理上是在springcloud体系中底层ribbon来做的负载均衡,是需要Eureka注册中心配合使用; 但既然要用k8s来部署微应用,是打算拿掉Eureka,直接使用k8s的svc。 还能够使用feign能使用k8s的svc吗? 是不是我feign这块理解有所欠缺, 这个问题也一直困扰我,拿掉feign,直接写restTeamplte又比较累。

作者回复: feign可以不用ribbon负载的,参考这里: https://stackoverflow.com/questions/27620338/spring-cloud-how-to-use-feign-without-ribbon

2020-11-01
2
1
wind
不禁点个赞。干货满满

作者回复: 谢谢支持!加油!

2019-11-15
1
收起评论