• Dubbo 用到哪些设计模式?


    Dubbo 框架在初始化和通信过程中使用了多种设计模式可灵活控制类加载 

    限控制等功能

    工厂模式 

    Provider  export 服务时会调用 ServiceConfig  export 方法。ServiceConfig

    中有个字段

    private static final Protocol protocol =

    ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtensi

    on();

    Dubbo 里有很多这种代码这也是一种工厂模式只是实现类的获取采用了 JDK

    SPI 的机制这么实现的优点是可扩展性强想要扩展实现只需要在 classpath

    下增加个文件就可以了代码零侵入另外像上面的 Adaptive 实现可以做到 

    调用时动态决定调用哪个实现但是由于这种实现采用了动态代理会造成代码 

    调试比较麻烦需要分析出实际调用的实现类

    装饰器模式 

    Dubbo 在启动和调用阶段都大量使用了装饰器模式 Provider 提供的调用链为 

    具体的调用链代码是在 ProtocolFilterWrapper  buildInvokerChain 完成 

    具体是将注解中含有 group=provider  Filter 实现按照 order 排序 

    后的调用顺序是

    EchoFilter -> ClassLoaderFilter -> GenericFilter -> ContextFilter ->

    ExecuteLimitFilter -> TraceFilter -> TimeoutFilter -> MonitorFilter ->

    ExceptionFilter

    更确切地说这里是装饰器和责任链模式的混合使用例如,EchoFilter 的作用是 

    判断是否是回声测试请求是的话直接返回内容这是一种责任链的体现而像 

    ClassLoaderFilter 则只是在主功能上添加了功能更改当前线程的 ClassLoader,

    这是典型的装饰器模式

    观察者模式 

    Dubbo  Provider 启动时需要与注册中心交互先注册自己的服务再订阅自 

    己的服务订阅时采用了观察者模式开启一个 listener。注册中心会每 5 秒定 

    时检查是否有服务更新如果有更新向该服务的提供者发送一个 notify 消息

    provider 接受到 notify 消息后即运行 NotifyListener  notify 方法执行监 

    听器方法

    动态代理模式 

    Dubbo 扩展 JDK SPI 的类 ExtensionLoader  Adaptive 实现是典型的动态代理 

    实现。Dubbo 需要灵活地控制实现类即在调用阶段动态地根据参数决定调用哪 

    个实现类所以采用先生成代理类的方法能够做到灵活的调用生成代理类的 

    代码是 ExtensionLoader  createAdaptiveExtensionClassCode 方法代理类 

    的主要逻辑是获取 URL 参数中指定参数的值作为获取实现类的 key。

  • 相关阅读:
    小程序开发学习
    guava 学习一 函数,集合操作
    《构建之法》第四章 两人合作 读后感
    模拟退火学习笔记
    Haywire
    [JSOI2004]平衡点
    CF1039D You Are Given a Tree
    CF797E Array Queries
    [SHOI2014]三叉神经树
    [国家集训队]Tree II
  • 原文地址:https://www.cnblogs.com/programb/p/12845264.html
Copyright © 2020-2023  润新知