dubbo自定义注册中心

554 阅读2分钟

dubbo自定义注册中心,dubbo本身已经提供了很多注册中心,我们要做的就是学习源码的写法,以及他的扩展方式,通过总结这种预留的扩展方式来更加熟悉我们的dubbo源码

1. 自定义注册中心步骤

   1.  自定义`Registry`,继承`FailbackRegistry`,并实现`doXXX()`方法;
   2.  自定义`RegistryFactory`,继承`AbstractRegistryFactory`,并实现`createRegistry()`方法,创建自定义的`Registry`   3.  配置自定义注册中心的 Dubbo SPI 文件;
   4.  使用自定义的注册中心。

2. 注册中心功能

   通过`RegistryFactory`创建`Registry`;
   通过`Registry.register()`注册;
   通过`Registry.unRegister()`取消注册;
   通过`Registry.subscribe()`订阅;
   通过`Registry.unSubscribe()`取消订阅;
   通过`Registry.notify()`通知服务变更。

   1.  自定义`Registry`,继承`FailbackRegistry`,并实现`doXXX()`方法;
   2.  自定义`RegistryFactory`,继承`AbstractRegistryFactory`,并实现`createRegistry()`方法,创建自定义的`Registry`   3.  配置自定义注册中心的 Dubbo SPI 文件;
   4.  使用自定义的注册中心。

3. demo

/**
* 自实现的注册中心
*/
public class MyRegistry extends FailbackRegistry {
   public MyRegistry(URL url){super(url);}
   @Override
   public void doRegister(URL url) {
       //在此实现自定义注册中心注册的关键代码
       //一般情况下是向注册中心媒介保存服务数据(如ZookeeperRegistry,向ZK写数据)
   }

   @Override
   public void doUnregister(URL url) {
       //在此实现自定义注册中心取消注册的关键代码
       //一般情况下是删除注册中心媒介中的服务数据(如ZookeeperRegistry,删除ZK中的数据)
   }

   @Override
   public void doSubscribe(URL url, NotifyListener listener) {
       //在此实现自定义注册中心订阅的关键代码
       //一般情况下是利用注册中心媒介的发布订阅功能(如ZookeeperRegistry,给ZK中的服务节点添加变更监听事件)
   }

   @Override
   public void doUnsubscribe(URL url, NotifyListener listener) {
       //在此实现自定义注册中心取消订阅的关键代码
       //以ZookeeperRegistry为例,将添加的变更监听给移除掉
   }

   @Override
   public boolean isAvailable() {
       //返回注册中心的状态,这个要结合注册中心媒介的状态
       //比如注册中心媒介挂了、断开连接了,即不可用了
       return false;
   }
}

/**
* 自定义注册中心的工厂
*/
public class MyRegistryFactory extends AbstractRegistryFactory {
   @Override
   protected Registry createRegistry(URL url) {
       return new MyRegistry(url);
   }
}


配置SPI
myRegistry=com.yuqiao.deeplearningdubbo.extension.registry.MyRegistryFactory


<!-- 配置自定义注册中心 --> 
<dubbo:registry id="myRegistry" address="myRegistry://IP:PORT" /> 
<!-- 给依赖的服务接口指定自定义注册中心 --> 
<dubbo:reference id="demoService" interface="com.yuqiao.deeplearningdubbo.analysis.base.DemoService" registry="myRegistry" />