dubbo中可以適配其它的rpc協(xié)議和注冊(cè)中心,對(duì)于有些企業(yè)自定義rpc的(我廠目前就是這樣掠廓,用的非常難受),也可以將其適配到dubbo
dubbo中的SPI
先從dubbo中的spi說起骡楼,dubbo為每個(gè)關(guān)鍵接口都提供了spi的支持措左,包括Router, Registry, Protocol等腌歉,對(duì)于擴(kuò)展接口蛙酪,比如Registry,會(huì)有一個(gè)RegistryFactory翘盖,這個(gè)RegistryFactory接口被標(biāo)記了@SPI注解桂塞,表示此接口是一個(gè)擴(kuò)展點(diǎn),代碼如下:
在META-INF/dubbo.internal/下會(huì)有以接口名為文件名的文件最仑,其中配置的是擴(kuò)展點(diǎn)的實(shí)現(xiàn)類:
其中是擴(kuò)展點(diǎn)的配置藐俺,className的格式:
適配RPC
想要適配RPC,最簡(jiǎn)單的方式就是實(shí)現(xiàn)兩個(gè)擴(kuò)展:
- 是否需要使用特定的注冊(cè)中心邏輯泥彤,如果需要欲芹,則實(shí)現(xiàn)RegistryFactory擴(kuò)展點(diǎn)
- 實(shí)現(xiàn)Protocol擴(kuò)展點(diǎn),用于支持RPC協(xié)議
實(shí)現(xiàn)方式非常簡(jiǎn)單吟吝,首先自定義RegistryFactory:
此factory的getRegistry方法返回自定義的CustomRegistry菱父,用于處理服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn):
最后在META-INF/dubbo/internal下準(zhǔn)備spi配置文件:
添加com.alibaba.dubbo.registry.RegistryFactory文件,其中配置上面的RegistryFactory:
custom=com.xxx.dubbo.CustomRegistryFactory
到此剑逃,注冊(cè)中心邏輯的擴(kuò)展已經(jīng)完成浙宜,Protocol的擴(kuò)展邏輯與此類似,只需要實(shí)現(xiàn)Protocol擴(kuò)展點(diǎn)蛹磺,自定義的Protocol可從AbstractProxyProtocol類繼承粟瞬,Protocol接口如下:
其中兩個(gè)主要方法:
- export方法用于暴漏遠(yuǎn)程服務(wù),比如監(jiān)聽端口開啟服務(wù)
- refer用于引用服務(wù)萤捆,即創(chuàng)建表示某個(gè)遠(yuǎn)程地址的服務(wù)的Invoker對(duì)象裙品,Invoker對(duì)象中封裝遠(yuǎn)程調(diào)用的邏輯