Dubbo對RPC的適配

dubbo中可以適配其它的rpc協議和註冊中心,對於有些企業自定義rpc的(我廠目前就是這樣,用的非常難受),也可以將其適配到dubbo

dubbo中的SPI

先從dubbo中的spi說起,dubbo為每個關鍵接口都提供了spi的支持,包括Router, Registry, Protocol等,對於擴展接口,比如Registry,會有一個RegistryFactory,這個RegistryFactory接口被標記了@SPI註解,表示此接口是一個擴展點,代碼如下:

Dubbo對RPC的適配

在META-INF/dubbo.internal/下會有以接口名為文件名的文件,其中配置的是擴展點的實現類:

Dubbo對RPC的適配

其中是擴展點的配置,$extName=$className的格式:

Dubbo對RPC的適配


適配RPC

想要適配RPC,最簡單的方式就是實現兩個擴展:

1. 是否需要使用特定的註冊中心邏輯,如果需要,則實現RegistryFactory擴展點

1. 實現Protocol擴展點,用於支持RPC協議

實現方式非常簡單,首先自定義RegistryFactory:

Dubbo對RPC的適配

此factory的getRegistry方法返回自定義的CustomRegistry,用於處理服務註冊和服務發現:

Dubbo對RPC的適配

最後在META-INF/dubbo/internal下準備spi配置文件:

Dubbo對RPC的適配

添加com.alibaba.dubbo.registry.RegistryFactory文件,其中配置上面的RegistryFactory:

custom=com.xxx.dubbo.CustomRegistryFactory

到此,註冊中心邏輯的擴展已經完成,Protocol的擴展邏輯與此類似,只需要實現Protocol擴展點,自定義的Protocol可從AbstractProxyProtocol類繼承,Protocol接口如下:

Dubbo對RPC的適配

其中兩個主要方法:

· export方法用於暴漏遠程服務,比如監聽端口開啟服務

· refer用於引用服務,即創建表示某個遠程地址的服務的Invoker對象,Invoker對象中封裝遠程調用的邏輯


分享到:


相關文章: