本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 接下来,我们开始分析 OpenFeign 同步环境下的生命周期的第二部分,使用 SynchronousMethodHandler 进行实际调用,其流程可以总结为: 调用代理类的方法实际调用的是前面一章中生成的 InvocationHandler 的 invoke 方法. 默认实现是查询 Map<Method, MethodHandler> methodToHandler 找到对应的 M…
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 接下来,我们开始分析 OpenFeign 的生命周期,结合 OpenFeign 本身的源代码.首先是从接口定义创建 OpenFeign 代理开始.我们这里只关心同步客户端,因为异步客户端目前还在实现中,并且在我们的项目中,异步响应式的客户端不用 OpenFeign,而是用的官方的 WebClient 创建 OpenFeign 代理 创建 OpenFeign 代理,主要分为以下几步: 使用…
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 首先,我们给出官方文档中的组件结构图: 官方文档中的组件,是以实现功能为维度的,我们这里是以源码实现为维度的(因为之后我们使用的时候,需要根据需要定制这些组件,所以需要从源码角度去拆分分析),可能会有一些小差异. 负责解析类元数据的 Contract OpenFeign 是通过代理类元数据来自动生成 HTTP API 的,那么到底解析哪些类元数据,哪些类元数据是有效的,是通过指定 Con…
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent OpenFeign 的由来和实现思路 在微服务系统中,我们经常会进行 RPC 调用.在 Spring Cloud 体系中,RPC 调用一般就是 HTTP 协议的调用.对于每次调用,基本都要经过如下步骤: 找到微服务实例列表并选择一个实例 调用参数序列化 使用 Http 客户端将请求发送出去 响应处理,反序列化等等 除了这些公共逻辑,业务上只需要定义参数,HTTP 方法,HTTP URI,…
本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ Spring Cloud 官方文档说了,它是一个完整的微服务体系,用户可以通过使用 Spring Cloud 快速搭建一个自己的微服务系统.那么 Spring Cloud 究竟是如何使用的呢?他到底有哪些组件? spring-cloud-commons组件里面,就有 Spring Cloud 默认提供的所有组件功…
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 接下来,将进入我们升级之路的又一大模块,即网关模块.网关模块我们废弃了已经进入维护状态的 zuul,选用了 Spring Cloud Gateway 作为内部网关.为何选择 Spring Cloud Gateway 而不是 nginx 还有 Kong 的原因是: 项目组对于 Java 更加熟悉,并且对于 Project Reactor 异步编程也比较熟悉,这个比较重要 需要在网关中使用我…
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford spring-cloud-common 不再是一个纯依赖的项目,这个模块包括: spring-framework-common 的依赖 同步与异步微服务公共的依赖 同步与异步微服务公共的框架代码改造,这个我们后面分析框架以及我们设计的修改的时候,会详细分析,这里先跳过 同步与异步微服务公共的依赖包括: 代码请参考:h…
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们使用 Log4j2 异步日志配置,防止日志过多的时候,成为性能瓶颈.这里简单说一下 Log4j2 异步日志的原理:Log4j2 异步日志基于高性能数据结构 Disruptor,Disruptor 是一个环形 buffer,做了很多性能优化(具体原理可以参考我的另一系列:高并发数据结构(disruptor)),Lo…
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在开始编写我们自己的日志 Filter 之前,还有一个问题我想在这里和大家分享,即在 Spring Cloud Gateway 中可能发生链路信息丢失的问题. 主要冲突 - Project Reactor 与 Java Logger MDC 之间的设计冲突 Poject Reactor 是基于异步响应式设计的编程模式的实现,它的主要实现思路是先编写执行链路,最后 sub 执行整个链路.但…
本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ 在理解 Spring Cloud 之前,我们先了解下 Spring 框架.Spring Boot.Spring Cloud 这三者的关系,从一个简单的 Bean,是如何发展出一个具有微服务特性的 Spring Cloud 的呢? Spring bean 是 Spring 框架在运行时管理的对象.Spring be…