Dubbo对RPC的适配

dubbo中可以适配其它的rpc协议和注册中心,对于有些企业自定义rpc的(我厂目前就是这样,用的非常难受),也可以将其适配到dubbo

dubbo中的SPI

先从dubbo中的spi说起,dubbo为每个关键接口都提供了spi的支持,包括Router, Registry, Protocol等,对于扩展接口,比如Registry,会有一个RegistryFactory,这个RegistryFactory接口被标记了@SPI注解,表示此接口是一个扩展点,代码如下:

image

在META-INF/dubbo.internal/下会有以接口名为文件名的文件,其中配置的是扩展点的实现类:

image

其中是扩展点的配置,className的格式:

image

适配RPC

想要适配RPC,最简单的方式就是实现两个扩展:

  1. 是否需要使用特定的注册中心逻辑,如果需要,则实现RegistryFactory扩展点
  2. 实现Protocol扩展点,用于支持RPC协议

实现方式非常简单,首先自定义RegistryFactory:

image

此factory的getRegistry方法返回自定义的CustomRegistry,用于处理服务注册和服务发现:

image

最后在META-INF/dubbo/internal下准备spi配置文件:

image

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

custom=com.xxx.dubbo.CustomRegistryFactory

到此,注册中心逻辑的扩展已经完成,Protocol的扩展逻辑与此类似,只需要实现Protocol扩展点,自定义的Protocol可从AbstractProxyProtocol类继承,Protocol接口如下:

image

其中两个主要方法:

  • export方法用于暴漏远程服务,比如监听端口开启服务
  • refer用于引用服务,即创建表示某个远程地址的服务的Invoker对象,Invoker对象中封装远程调用的逻辑

你可能感兴趣的:(Dubbo对RPC的适配)