一些膨、基本類
1.Extensible 代表這個(gè)類或者接口是可擴(kuò)展的喇澡,默認(rèn)單例、不需要編碼,里面定義了類路徑例驹、是否單例捐韩、code碼,如果我們要使用sofa-rpc的擴(kuò)展機(jī)制鹃锈,必須定義Extensible
2.Extension 擴(kuò)展點(diǎn)荤胁,定義了擴(kuò)展點(diǎn)名字、擴(kuò)展點(diǎn)編碼屎债、優(yōu)先級(jí)排序仅政,默認(rèn)不需要,大的優(yōu)先級(jí)高盆驹、是否覆蓋其它低的同名擴(kuò)展圆丹、排斥其它擴(kuò)展,可以排斥掉其它低的擴(kuò)展
3.ExtensionClass 擴(kuò)展接口實(shí)現(xiàn)類躯喇,用以包裝對(duì)于Extensible和Extension的實(shí)現(xiàn)類辫封,包含了注解擴(kuò)展的基本信息和對(duì)應(yīng)擴(kuò)展類的實(shí)例
4.ExtensionLoader 擴(kuò)展加載器,一個(gè)可擴(kuò)展接口類廉丽,對(duì)應(yīng)一個(gè)加載器倦微,包含了類的各種加載器,加載監(jiān)聽器(比一定需要)
5.ExtensionLoaderFactory ExtensionLoader工廠類
6.ExtensionLoaderListener 加載監(jiān)聽器接口正压,當(dāng)ExtensionClass生成成功后欣福,出發(fā)onLoad事件
二、源碼分析
ExtensionLoader.ExtensionLoader()
1.if (autoLoad) {//是否自動(dòng)裝填焦履,但是目前sofa-rpc并沒能實(shí)現(xiàn)異步裝填
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);//檢查是否有可擴(kuò)展標(biāo)識(shí)
4.extensionClass = buildClass(extension, implClass, alias);//order屬性或者override判定當(dāng)前擴(kuò)展可以覆蓋其它同名擴(kuò)展
5.loadSuccess(alias, extensionClass);//ExtensionLoader加載完畢拓劝,觸發(fā)listener事件
三、總結(jié)
1.ExtensionLoader自動(dòng)裝填機(jī)制:目前系統(tǒng)并沒實(shí)現(xiàn)嘉裤,可以考慮使用future機(jī)制來獲取ExtensionLoader
2.我們可以通過order或者override屬性郑临,對(duì)系統(tǒng)的各個(gè)擴(kuò)展點(diǎn)進(jìn)行擴(kuò)展,目前已知的可擴(kuò)展如下
接口名 | 中文名 | 內(nèi)置實(shí)現(xiàn) |
---|---|---|
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 | 負(fù)載均衡 | 隨機(jī)、輪詢侨把、最少并發(fā)犀变、一致性hash、本機(jī)優(yōu)先 |
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 | 協(xié)議 | bolt骇笔、dubbo省店、rest |
com.alipay.sofa.rpc.protocol.ProtocolDecoder | 協(xié)議解碼 | bolt |
com.alipay.sofa.rpc.protocol.ProtocolEncoder | 協(xié)議編碼 | bolt |
com.alipay.sofa.rpc.protocol.TelnetHandler | telnet的響應(yīng) | version嚣崭、help、ls |
com.alipay.sofa.rpc.proxy.Proxy | 代理類 | java懦傍、javassist |
com.alipay.sofa.rpc.registry.Registry | 注冊(cè)中心 | zookeeper |
com.alipay.sofa.rpc.server.Server | 服務(wù)端實(shí)現(xiàn) | bolt雹舀、rest |
com.alipay.sofa.rpc.transport.ClientTransport | 客戶端長(zhǎng)連接實(shí)現(xiàn) | netty |
com.alipay.sofa.rpc.transport.ServerTransport | 服務(wù)端長(zhǎng)連接實(shí)現(xiàn) | netty |