Dubbo服务注册与发现

心已赠人 2021-11-17 00:50 385阅读 0赞

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 广播事件遍历所有的监听器:

  1. protected void invokeListener(ApplicationListener listener, ApplicationEvent event) {
  2. ErrorHandler errorHandler = getErrorHandler();
  3. if (errorHandler != null) {
  4. try {
  5. listener.onApplicationEvent(event);
  6. }
  7. catch (Throwable err) {
  8. errorHandler.handleError(err);
  9. }
  10. }
  11. else {
  12. listener.onApplicationEvent(event);
  13. }
  14. }

ServiceBean 服务暴露:

  1. public void onApplicationEvent(ContextRefreshedEvent event) {
  2. if (isDelay() && !isExported() && !isUnexported()) {
  3. if (logger.isInfoEnabled()) {
  4. logger.info("The service ready on spring started. service: " + getInterface());
  5. }
  6. export();
  7. }
  8. }

protocol.export() 主要三件事:

  • netty bind(url) 暴露服务
  • ZooKeeper 注册 provider,并创建 configurator 配置信息目录
  • 通知该服务相关订阅者

发表评论

表情:
评论列表 (有 0 条评论,385人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Dubbo服务注册发现

    Dubbo服务的注册与发现 前言 最近参与的项目是一个基于`Dubbo`的项目,在开发过程中有些同事对于`Dubbo`服务的注册与发现机制,似乎不太了解。所以我抽空

    相关 服务注册发现

    在分布式系统中,各个子系统都是多个实例存在,这个时候必须要引入一个服务协调器,用于给调用方提供可用的调用提供者的命名消息。 服务协调器,如zookeeper,etcd,eu