美文网首页
sofa-rpc源码分析 4-Extension扩展点设计

sofa-rpc源码分析 4-Extension扩展点设计

作者: 折浪君 | 来源:发表于2019-06-19 11:43 被阅读0次

    一、基本类

    1.Extensible 代表这个类或者接口是可扩展的,默认单例、不需要编码,里面定义了类路径、是否单例、code码,如果我们要使用sofa-rpc的扩展机制,必须定义Extensible
    2.Extension 扩展点,定义了扩展点名字、扩展点编码、优先级排序,默认不需要,大的优先级高、是否覆盖其它低的同名扩展、排斥其它扩展,可以排斥掉其它低的扩展
    3.ExtensionClass 扩展接口实现类,用以包装对于Extensible和Extension的实现类,包含了注解扩展的基本信息和对应扩展类的实例
    4.ExtensionLoader 扩展加载器,一个可扩展接口类,对应一个加载器,包含了类的各种加载器,加载监听器(比一定需要)
    5.ExtensionLoaderFactory ExtensionLoader工厂类
    6.ExtensionLoaderListener 加载监听器接口,当ExtensionClass生成成功后,出发onLoad事件
    

    二、源码分析

    ExtensionLoader.ExtensionLoader()
          1.if (autoLoad) {//是否自动装填,但是目前sofa-rpc并没能实现异步装填
                List<String> paths = RpcConfigs.getListValue(RpcOptions.EXTENSION_LOAD_PATH);
                for (String path : paths) {
                    loadFromFile(path);
                }
            }
          2.tmp = ClassUtils.forName(className, false);//反射获取类
          3.Extension extension = implClass.getAnnotation(Extension.class);//检查是否有可扩展标识
          4.extensionClass = buildClass(extension, implClass, alias);//order属性或者override判定当前扩展可以覆盖其它同名扩展
          5.loadSuccess(alias, extensionClass);//ExtensionLoader加载完毕,触发listener事件
    

    三、总结
    1.ExtensionLoader自动装填机制:目前系统并没实现,可以考虑使用future机制来获取ExtensionLoader
    2.我们可以通过order或者override属性,对系统的各个扩展点进行扩展,目前已知的可扩展如下

    接口名 中文名 内置实现
    com.alipay.sofa.rpc.client.Client 客户端 Failover、Failfast
    com.alipay.sofa.rpc.client.ConnectionHolder 连接管理器 AllConnect(全部连接)
    com.alipay.sofa.rpc.client.AddressHolder 地址管理器 单组、多组
    com.alipay.sofa.rpc.client.LoadBalancer 负载均衡 随机、轮询、最少并发、一致性hash、本机优先
    com.alipay.sofa.rpc.client.Router 路由器
    com.alipay.sofa.rpc.codec.Compressor 压缩 snappy、quicklz
    com.alipay.sofa.rpc.codec.Serializer 序列化器 java、hessian、pb
    com.alipay.sofa.rpc.filter.Filter 拦截器
    com.alipay.sofa.rpc.protocol.Protocol 协议 bolt、dubbo、rest
    com.alipay.sofa.rpc.protocol.ProtocolDecoder 协议解码 bolt
    com.alipay.sofa.rpc.protocol.ProtocolEncoder 协议编码 bolt
    com.alipay.sofa.rpc.protocol.TelnetHandler telnet的响应 version、help、ls
    com.alipay.sofa.rpc.proxy.Proxy 代理类 java、javassist
    com.alipay.sofa.rpc.registry.Registry 注册中心 zookeeper
    com.alipay.sofa.rpc.server.Server 服务端实现 bolt、rest
    com.alipay.sofa.rpc.transport.ClientTransport 客户端长连接实现 netty
    com.alipay.sofa.rpc.transport.ServerTransport 服务端长连接实现 netty

    蚂蚁官方文档

    相关文章

      网友评论

          本文标题:sofa-rpc源码分析 4-Extension扩展点设计

          本文链接:https://www.haomeiwen.com/subject/wtfqqctx.html