一、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

  1. JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加
    载,会很浪费资源
  2. 如果有扩展点加载失败,则所有扩展点无法使用
  3. 提供了对扩展点包装的功能(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框架