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

一、基本类

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 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扩展点设计)