自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 dubbo解析-详解心跳机制

dubbo的心跳发送是由Netty的IdleStateHandler对象处理的。该对象配置在netty的责任链里面,当发送请求或者收到响应时,都会经过该对象处理。在双方通讯开始后该对象会创建一些空闲检测定时器,用于检测收到请求会触发读事件、连接、发送请求会触发写事件。当在指定的空闲时间内没有收到读事件或写事件,便触发超时事件,然后IdleStateHandler将超时事件交给责任链里面的下一个handler处理,NettyClientHandler是客户端使用的,它收到事件后向对方发送一个心跳事件的请求。

2020-06-30 22:33:41 2423

原创 dubbo解析-详解日志适配原理

dubbo自身在运行的过程中也要打印日志,打印日志的框架有很多,那么dubbo是通过哪个框架打印日志的?本文研究一下dubbo的日志适配原理。先说一下如何使用指定的日志框架,可以使用如下配置:可以在配置文件中配置:dubbo.application.logger=slf4j 也可以在启动命令里:java -Ddubbo.application.loggerLoggerFactorydubbo默认是log4j 配置文件的设置值会覆盖启动命令的值。

2020-06-28 16:08:11 950

原创 dubbo解析-详解令牌验证原理

过令牌验证在注册中心控制权限,以决定要不要下发令牌给消费者,可以防止消费者绕过注册中心访问提供者,另外通过注册中心可灵活改变授权方式,而不需修改或升级提供者。服务端启动的时候会监听注册中心的“/dubbo/接口名/configurators”节点,服务端的监听器OverrideListener收到修改后的配置,服务端会重新发布服务,并且重新注册信息。消费端启动的时候会监听注册中心的“/dubbo/接口名/providers”节点,当提供者启动完毕或者重新发布服务,都会修改该节点

2020-06-27 11:20:47 1170 4

原创 dubbo解析-线程dump原理解析

本文基于dubbo 2.7.5版本代码在一些场景中,比如服务端收到请求需要在业务线程池中处理请求时,dubbo需要通过ExecutorRepository创建线程池。在创建线程池的时候,dubbo设置了RejectedExecutionHandler,也就是当线程池满的时候,会调用RejectedExecutionHandler。dubbo提供了RejectedExecutionHandler的实现类AbortPolicyWithReport。当线程池满的时候,AbortPolicyWithRepor.

2020-06-26 22:25:42 1105

原创 dubbo解析-介绍服务端和客户端启动和服务调用步骤

前面的文章介绍了很多dubbo的各个组件,本文将对通过介绍启动和服务调用过程梳理一下这些组件,也让大家对dubbo的全局有一个了解。一、服务端启动二、客户端启动三、服务调用

2020-06-26 18:00:41 1130

原创 dubbo解析-详解服务目录的原理以及代码实现

服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。通过这些信息,服务消费者就可通过 Netty 等客户端进行远程调用。dubbo访问服务时,会先使用StaticDirectory从多个注册中心里面选择一个合适的注册中心,然后使用RegistryDirectory从多个分组中选择一个分组,最后使用StaticDirectory从分组的服务提供者集合里面选择一个合适的服务提供者,之后调用该提供者访问远程服务。

2020-06-18 17:17:34 838

原创 dubbo解析-解析线程模型

在RPC调用中,线程一共要做两件事:一是接受消息或者发送消息,也就是网络交互,这个可以认为是IO处理,二是处理业务,包括将请求转发给底层提供服务的对象,并且执行服务逻辑,这个可以认为是业务处理。这两件事可以使用不同的线程处理,也可以用相同的线程处理。由此便产生了不同的线程模型。本文将介绍线程模型中涉及到的配置以及各个实现类的功能

2020-06-13 18:59:47 571

原创 dubbo解析-扩展RPC协议(基于dubbo协议优化)

本文通过对dubbo协议的编解码器扩展,实现一个优化后的协议。由于dubbo将协议与编解码器绑定了,所以本文还扩展了dubbo协议。 1. 对报文体压缩,在报文头使用四个bit表示压缩格式,这样报文体可以使用的压缩算法最多可以有16种; 2. 优化status表示,status共有10个状态,4个bit可以表示16种状态,因此不在使用8个bit表示status字段,而使用4个bit; 3. RPC Request ID使用变长表示,RPC Request ID在原dubbo协议中使用long表示

2020-06-13 00:01:59 1117 2

原创 dubbo解析-dubbo协议如何使用netty完成了报文发送和接收

本文分析一下dubbo协议如何使用netty完成了报文的发送和接收,分为服务端和消费端解析源代码。下面的代码来自类NettyServer的doOpen方法,该方法完成netty服务端的启动,执行完该方法,netty就可以接收请求了。消费端代码来自类NettyClient(基于netty4),消费端netty启动分为两步,第一个步是启动netty(doOpen方法),第二步是建立与服务端的连接(doConnect方法)。 .

2020-06-09 22:57:03 1363

原创 dubbo解析-从dubbo协议分析如何设计RPC协议

本文介绍一下dubbo协议的组成,通过对dubbo协议的学习,为我们以后设计自己的RPC协议提供指导。也会从代码上介绍dubbo如何使用Netty。dubbo默认RPC协议是使用dubbo协议。dubbo协议分为协议头和协议体。协议头占16个字节,协议体是可变长的,协议体是具体的请求/响应数据。一、dubbo协议二、dubbo协议特性三、设计协议需要考虑的问题

2020-06-08 22:23:24 1063

原创 dubbo解析-消费端启动检查(check属性)

本文基于dubbo 2.7.5版本代码dubbo的客户端在启动的时候,默认检查是否有可用的远程服务,如果没有dubbo报如下异常:java.lang.IllegalStateException: Failed to check the status of the service XXX. No provider available for the service test.Process from the url zookeeper://localhost:2181/.....(省略) to t.

2020-06-06 16:29:00 3804 4

原创 dubbo解析-探讨dubbo稳定性

dubbo成功完成服务调用需要多个组件的参与,比如注册中心、配置中心、元数据中心、服务端提供服务。今天忽然想到一个问题,如果参与组件有任何一个宕机了,那么服务调用还会成功吗?或者有任何一个网络不通,消费端或者服务端能正常启动吗?接下来通过本文探讨这个问题。因为dubbo在2.7.5版本里面新增了云原生服务自省架构,所以接下来的分析分为传统架构和服务自省架构。

2020-06-03 22:30:03 682

原创 dubbo解析-不同参数设置方式之间的覆盖关系

dubbo可以通过多种方式配置。本文研究一下不同方式之间属性值的覆盖关系如何。 本文首先介绍五种配置方式:1. 系统属性,通过-D设置,或者环境变量 2. 配置中心3. XXXConfig API编程方式配置,可以通过springboot配置文件、Annotation注解设置XXXConfig的属性值4. 本地dubbo.properties配置文件5. 对于消费端来说,还有一些配置来自服务端。对每种方式都会举例。并介绍其优先级,最后分析代码介绍如何实现参数覆盖

2020-06-02 21:16:56 991

原创 dubbo解析-关于dubbo架构设计的思考和总结

到现在为止,已经对dubbo的源代码分析了很多,看到了很多很好的设计,本文总结一下,以便对以后编码设计提供一些指导。本文将长期不断更新。一、dubbo优秀功能汇总1、SPI2、代码生成器3、时间轮二、dubbo设计的一些启示1、系统要提供尽可能多的配置2、多层级配置优先级3、合理的分层架构三、dubbo使用到的设计模式1、工厂模式2、代理模式3、装饰模式4、单例模式

2020-06-01 23:06:56 203

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除