一、Dubbo
Dubbo处理流程
流程:
Provider在容器启动时,向注册中心注册自己提供的服务。
Consumer在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者的地址列表给消费者,如有变更,通过长连接推送到消费者。
消费者调用时,从注册中心根据负载均衡策略从中选择一台生产者调用,调用失败则重新选择一台
生产者、消费者在内存中的调用次数和用时,定时每分钟发送到监控中心。
注册中心的实现方式:zookeeper
Dubbo实例
Dubbo管理控制台
Dubbo配置项
二、SPI
JDK
1、当服务提供者提供了接口的一种具体实现后,在META-INF/services目录下创建一个以“接口全
限定名”为命名的文件,内容为实现类的全限定名;
2、接口实现类所在的jar包放在主程序的classpath中;
3、主程序通过java.util.ServiceLoader动态装载实现模块,它通过扫描META-INF/services目录下
的配置文件找到实现类的全限定名,把类加载到JVM;
4、SPI的实现类必须携带一个无参构造方法;
Dubbo
- JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加
载,会很浪费资源 - 如果有扩展点加载失败,则所有扩展点无法使用
- 提供了对扩展点包装的功能(Adaptive),并且还支持通过set的方式对其他的扩展点进行注入
Adaptive
实现SPI动态选择具体扩展点。通过URL的形式处理,Dubbo所有注册信息都是用URL形式处理的。
通过解析URL携带的参数,获得指定的扩展点value值实现,如果没有携带,则使用SPI注解中指定的值。
三、Dubbo高级实战
3.1 调用时拦截
- 实现Dubbo rpc下的filter接口
- @active注解指定生效的对象
- 实现filter
- 在META-INF.Dubbo新建filter文件,把filter的全类名写入
这种功能通常单独开发依赖,在引用依赖后就会对接口进行拦截。
3.2 负载均衡策略
- 配置使用:消费方@Reference(loadbalance=“random”)
服务提供@Service(loadbalance=“random”) - 自定义:实现Dubbo的loadbalance接口,配置META-INF/dubbo,创建loadbalance文件,内容写入自定义的loadbalance全类名。
指定负载均衡器为自定义的。
3.3 异步调用
- 使用:xml中配置,针对指定的类的method,配置async=“true”
3.4 线程池
默认提供fix、cache两种线程池。
- 自定义线程池
3.5 路由规则
3.6 服务动态降级
四、Dubbo源码
五、作业
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MweklNw6-1631317508483)(C:\Users\Howey\AppData\Roaming\Typora\typora-user-images\image-20210731215041736.png)]
六、直播
1、学习方法
1、2小时学习后停下来总结+次日早上进行回顾
2、Dubbo的知识点
特性、使用、主要配置参数、SPI规范、线程池,与jdk的区别,jdk线程池常见问题:参数、种类特点、拒绝策略、juc、schedule
3、掌握程度
根据结构图描述清楚过程。源码辅助理解理论。
注册中心挂了,服务能否继续调用?调用过即可,Dubbo直连,绕过注册中心,调用
池常见问题:参数、种类特点、拒绝策略、juc、schedule
3、掌握程度
根据结构图描述清楚过程。源码辅助理解理论。
注册中心挂了,服务能否继续调用?调用过即可,Dubbo直连,绕过注册中心,调用
Dubbo的10层,如何设计类似Dubbo的rpc框架