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" />