目录
Dubbo3.0 底层原理
基本组成
启动容器
根据用户配置选择,启动tomcat或者jetty(java)
监听指定端口的hhtp请求
转发请求
编写Sevlet 转发所有请求
处理请求-调用信息内容
怎么样确定调用的是哪一个方法?
- 全限定类名
- 方法名
- 方法参数类型列表
- 方法参数值
补充参数:为了支持多版本的情况
5. 版本
处理请求-序列化和反序列化
只要双方协商一致即可
- JDK
- JSON
提供者-本地注册
把实际的实现类和接口进行绑定
再后续反射处理的时候时候使用
提供者-本地执行
接收到方法远程调用后,反射处理
消费者-发送请求
获取一个远程接口的对象(代理对象)
直接调用
消费者-代理对象自动组装调用信息和远程请求
组装:调用信息内容
发送Http请求
注册中心
提供者ip端口不固定 需要再注册中心注册
调用者查询后本地缓存
特性:
- 高性能
- 改变监听
- 心跳监听
容错 + 重试
在调用异常的时候自动触发重试
因为有负载均衡策略
下次重试可能会调用没有问题的机器
如果单次配置的重试次数用完
则进入配置的容错返回
mock机制
在提供者还没有开发好的时候,消费端可以自行模拟接口返回数据
远程协议抽象
抽象各种远程调用协议(tomcat、netty)
抽象之后再提供者注册的时候就把自身所用协议注册上去
消费者根据提供者的注册消息切换对应协议即可
可以根据 class 和 协议 抽象 成一个 invoker