Dubbo服务注册与发现

Dubbo服务发现

Dubbo默认是Zookeeper注册服务中心。

  1. Dubbo通过ZookeeperRegistry类来注册和订阅服务,通过zookeeper事件监听服务变更,一旦服务变更,消费端收到通知,然后主动去zookeeper拉取该服务的提供者子目录,这些提供者子目录记录了注册该服务的URL信息。
  2. RegistryDirectory类封装服务提供者,映射成RegistryDirectory.methodInvokerMap的map类型的属性。
  3. 客户端端调用服务的方法时,会从RegistryDirectory.methodInvokerMap中取对应的方法的服务提供者URL信息进行RPC调用。

Dubbo服务注册

服务暴露,其实也是创建了服务端的存根 Invoker(代理),并且将存根(Invoker)放入了一个 exporter 中。

ServiceBean

ServiceBean 实现了 ApplicationListener 接口会接收来自 SimpleApplicationEventMulticaster 的广播事件。
接收到事件后执行 onApplicationEvent 方法。从而进行 Dubbo 服务暴露。

SimpleApplicationEventMulticaster 的 multicastEvent 广播事件遍历所有的监听器:

protected void invokeListener(ApplicationListener listener, ApplicationEvent event) {
        ErrorHandler errorHandler = getErrorHandler();
        if (errorHandler != null) {
            try {
                listener.onApplicationEvent(event);
            }
            catch (Throwable err) {
                errorHandler.handleError(err);
            }
        }
        else {
            listener.onApplicationEvent(event);
        }
    } 

ServiceBean 服务暴露:

 public void onApplicationEvent(ContextRefreshedEvent event) {
        if (isDelay() && !isExported() && !isUnexported()) {
            if (logger.isInfoEnabled()) {
                logger.info("The service ready on spring started. service: " + getInterface());
            }
            export();
        }
    }

protocol.export() 主要三件事:

  • netty bind(url) 暴露服务
  • ZooKeeper 注册 provider,并创建 configurator 配置信息目录
  • 通知该服务相关订阅者
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值