精华内容
下载资源
问答
  • Dubbo服务注册和发现

    千次阅读 2019-02-11 17:51:47
    Dubbo服务发现:先到注册中心寻找服务的List,选中一个,然后被调用方建立NIO连接,传输数据包,进行方法调用  利用心跳去检测注册服务是否存活;  在Spring启动后会利用DubboNamespaceHandler解析配置文件中的...

    Dubbo的服务发现:先到注册中心寻找服务的List,选中一个,然后和被调用方建立NIO连接,传输数据包,进行方法调用
        利用心跳去检测注册的服务是否存活;
      在Spring启动后会利用DubboNamespaceHandler解析配置文件中的Bean,生成ServiceBean和ReferenceBean,
      ServiceBean进行服务暴露(自己跟到了):
      ReferenceBean则进行服务的自我发现,
      具体过程
      从建立spring到netty client建立连接的调用栈:
        NettyClient.doOpen() line: 66
        NettyClient(AbstractClient).(URL, ChannelHandler) line: 94
        NettyClient.(URL, ChannelHandler) line: 61
        NettyTransporter.connect(URL, ChannelHandler) line: 37
        Transporter$Adpative.connect(URL, ChannelHandler) line: not available
        Transporters.connect(URL, ChannelHandler...) line: 67
        HeaderExchanger.connect(URL, ExchangeHandler) line: 37
        Exchangers.connect(URL, ExchangeHandler) line: 102
        DubboProtocol.initClient(URL) line: 378
        DubboProtocol.getSharedClient(URL) line: 344
        DubboProtocol.getClients(URL) line: 321
        DubboProtocol.refer(Class, URL) line: 303
        ProtocolListenerWrapper.refer(Class, URL) line: 65
        ProtocolFilterWrapper.refer(Class, URL) line: 62
        Protocol$Adpative.refer(Class, URL) line: not available
        RegistryDirectory.toInvokers(List) line: 405
        RegistryDirectory.refreshInvoker(List) line: 228
        RegistryDirectory.notify(List) line: 196
        ZookeeperRegistry(AbstractRegistry).notify(URL, NotifyListener, List) line: 449
        ZookeeperRegistry(FailbackRegistry).doNotify(URL, NotifyListener, List) line: 273
        ZookeeperRegistry(FailbackRegistry).notify(URL, NotifyListener, List) line: 259
        ZookeeperRegistry.doSubscribe(URL, NotifyListener) line: 170
        ZookeeperRegistry(FailbackRegistry).subscribe(URL, NotifyListener) line: 189
        RegistryDirectory.subscribe(URL) line: 134
        RegistryProtocol.doRefer(Cluster, Registry, Class, URL) line: 271
        RegistryProtocol.refer(Class, URL) line: 254
        ProtocolListenerWrapper.refer(Class, URL) line: 63
        ProtocolFilterWrapper.refer(Class, URL) line: 60
        Protocol$Adpative.refer(Class, URL) line: not available
        ReferenceBean(ReferenceConfig).createProxy() line: 394
        ReferenceBean(ReferenceConfig).init() line: 303
        ReferenceBean(ReferenceConfig).get() line: 138
        ReferenceBean.getObject() line: 65
        DefaultListableBeanFactory(FactoryBeanRegistrySupport).doGetObjectFromFactoryBean(FactoryBean, String, boolean) line: 142

        整体来说: 先由注册中心的协议处理器处理注册中心的地址,找到所有provider的地址,创建所有invoker,然后再由invoker在真正调用时发起调用。
        注册中心的这个也抽象一种协议,由注册中心结合提供者的协议推导出提供者的协议地址,也就是目标端的地址与端口得知了。
        每一个接口在zookeeper上都有节点,节点下面是provider,再下面是所有provider的具体地址。

    Dubbo的一个接口有多种实现的时候 使用group  版本更替使用version

    Dubbo支持 RMI  Dubbo hessain webservice http 
    dubbo 和rmi基于TCP 
    Hessian 和webservice 基于Http
    TCP和HTTP的区别:
    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,没有端口的概念     
    HTTP是应用层协议,主要解决如何包装数据
    UDP:和TCP类似 有端口的概念

    序列化:hessian2 dubbo json kryo等

    展开全文
  • Dubbo 服务注册发现

    2021-04-25 22:19:39
    大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 服务注册与发现:在上个章节中我们简单的介绍了 Dubbo 中的四大角色,其中服务注册和服务发现就涉及到我们把一个本地服务暴露给远程客户端调用和本地客户端引用一...

    Dubbo 服务注册与发现

    前言

    大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 服务注册与发现:在上个章节中我们简单的介绍了 Dubbo 中的四大角色,其中服务注册和服务发现就涉及到我们把一个本地服务暴露给远程客户端调用和本地客户端引用一个远程服务的过程。那么我们现在就开始吧!

    1. 什么是服务注册

    根据上个章节的讨论,我们可以知道服务提供者和服务消费者都会向注册中心注册服务相关的元信息(具体元信息请查阅上个章节)。当我们需要暴露一个服务给其他应用端调用时那么应用端是怎样知道我们的服务在哪里?暴露了什么接口?通讯端口是多少?这些信息客户端是怎样获取的呢?这些都需要我们的服务提供者向我们的注册中心注册,消费端获取这些注册元信息再进行远程调用。那么服务提供者向注册中心注册元信息的过程就是服务注册。整个服务注册过程大致包括了:参数检测,URL 组装、本地服务导出,远程服务导出、注册中心服务注册。

    2. 什么是服务引用

    在 Dubbo 中服务引用发生在两种情况分别是:Spring 容器回调生命周期方法 afterPropertiesSet 和服务被注入到其他类引用的时候。很明显第一种是只要 Spring 容器启动都会去回调所有 afterPropertiesSet 方法进行回调属于一种饿汉式方式(一上来就开干),而另外一种则是在我们注入使用的时候属于懒汉式方式(使用的时候才发生关系)。两种方式各有优缺点:饿汉式可以在应用容器启动时候进行合法性检测,而懒汉式在使用时加载提高了应用启动速度但是也带来了一些只有在使用时才能发现的问题。

    **Tips:**我上面说的是 Dubbo 2.6.x 及以前版本,在 Dubbo 2.7.x 中只存在第二种。那么服务的引用简单来说就是获取对远程服务调用的代理对象。

    3. Dubbo 中的服务注册与发现流程

    • 服务注册流程

      Dubbo服务导出简要版

    1. 当我们的 Spring 容器启动完成的时候会发布 ContextRefreshedEvent 事件,那么 Dubbo 通过DubboBootstrapApplicationListener 监听类来接收 ContextRefreshedEvent 事件。

      **Tips:**这是 Dubbo 与 Spring 整合的切入点。

    2. 当监听器接收到 ContextRefreshedEvent 事件后,Dubbo 会做以下几点事情:暴露服务、导出元数据、注册本地服务实例、初始化远程调用代理对象。导出元数据(在 Dubbo2.7.x 中元数据和配置信息是分离的这里仅仅导出的是元数据)、注册本地实例(在 JVM 导出服务)、初始化远程代理对象(其实就是创建一个调用远程的 Invoker 代理对象)。

    3. 其中这里我们主要讨论暴露服务,那么暴露服务过程主要做了以下几部分事情。第一部分是前置工作:主要用于检查参数,组装 URL。第二部分是导出服务:包含导出服务到本地 (JVM)和导出服务到远程两个过程。第三部分是向注册中心注册服务:用于服务发现。

    • 服务发现流程

      Dubbo服务导出简要版

    1. 首先我们的 ReferenceBean 是实现 FactoryBean 接口,属性 Spring 的小伙伴都知道当我们通过 Spring 容器进行依赖注入或者是依赖查找 bean 时会触发 getObject 方法被调用,而 ReferenceBean 重新改写该方法,因此 ReferenceBean#getObject 会被在从 Spring 容器中获取 bean 时触发回调。

      **Tips:**这是整个服务引用的切入点。

    2. getObject 重载方法被调用,首先会检查配置属性、参数校验等。

    3. check 本地存根、mock 检查。(后面章节会详细介绍)

    4. 创建远程代理对象。

    以上的流程分析大家可以根据我对 Dubbo 2.7.x 源码的注释一起学习,代码的分析入口类DubboBootstrapApplicationListener#onApplicationContextEvent

    代码地址:https://github.com/liyong1028826685/dubbo.git

    **Tips:**代码是基于2.7.x版本。

    4. 小结

    在本小节中我们主要学习了 Dubbo 中的服务注册和服务引用的概念,并深入的学习了服务注册和服务引用的主要流程以及和 Spring 整合的两个切入点:DubboBootstrapApplicationListener#onApplicationContextEventReferenceBean#getObject,同时也注意到了 Dubbo 2.6.x 和 Dubbo 2.7.x 版本的一些差异。

    本节课程的重点如下:

    1. 理解 Dubbo 中服务注册

    2. 理解 Dubbo 中服务引用

    3. 了解 Dubbo 中服务注册流程

    4. 了解 Dubbo 中服务注册引用

    5. 了解 Dubbo 与 Spring 整合的切入点

    作者

    个人从事金融行业,就职过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就职于某银行负责统一支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域。同时也热衷于技术分享创立公众号和博客站点对知识体系进行分享。

    博客地址:http://youngitman.tech

    微信公众号:
    在这里插入图片描述

    知识星球:

    在这里插入图片描述

    展开全文
  • Dubbo服务注册发现

    万次阅读 2019-07-29 16:16:38
    Dubbo服务发现 Dubbo默认是Zookeeper注册服务中心。 Dubbo通过ZookeeperRegistry类来注册和订阅服务,通过zookeeper事件监听服务变更,一旦服务变更,消费端收到通知,然后主动去zookeeper拉取该服务的提供者子目录...

    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 配置信息目录
    • 通知该服务相关订阅者
    展开全文
  • Dubbo服务注册发现的流程

    千次阅读 2020-04-08 15:48:31
    Dubbo 服务注册发现的流程 1、流程说明: • Provider(提供者)绑定指定端口并启动服务 • 指供者连接注册中心,并发本机IP、端口、应用信息提供服务信息发送至注册中心存储 • Consumer(消费者),连接注册...

    Dubbo 服务注册与发现的流程

    在这里插入图片描述
    1、流程说明:

    • Provider(提供者)绑定指定端口并启动服务

    • 指供者连接注册中心,并发本机IP、端口、应用信息和提供服务信息发送至注册中心存储

    • Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信息至注册中心

    • 注册中心根据 消费 者所求服务信息匹配对应的提供者列表发送至Consumer 应用缓存。

    • Consumer 在发起远程调用时基于缓存的消费者列表择其一发起调用。

    • Provider 状态变更会实时通知注册中心、在由注册中心实时推送至Consumer

    2、设计的原因:

    • Consumer 与Provider 解偶,双方都可以横向增减节点数。

    • 注册中心对本身可做对等集群,可动态增减节点,并且任意一台宕掉后,将自动切换到另一台

    • 去中心化,双方不直接依懒注册中心,即使注册中心全部宕机短时间内也不会影响服务的调用

    • 服务提供者无状态,任意一台宕掉后,不影响使用

    展开全文
  • Dubbo服务注册发现的流程?

    千次阅读 2020-02-13 08:50:47
    Provider 连接注册中心,将本机 IP、端口、应用信息提供服务信息发送至注册中心存储 Consumer 订阅服务地址 Consumer(服务消费者),连接注册中心 ,发送应用信息、所求服务信息至注册中心 服务订阅或变更时...
  • 目前的标配是用ZooKeeper进行服务注册,用Dubbo自带的Dubbo Admin进行服务管理,基本来说是够用的。在讲今天的内容之前,还是看看Dubbo+ZooKeeper是怎么玩的。Dubbo+ZooKeeper配置流程1.POM依赖<dependency>&...
  • Dubbo服务注册发现

    万次阅读 2020-09-01 20:41:08
    Dubbo服务注册发现 前言 最近参与的项目是一个基于Dubbo的项目,在开发过程中有些同事对于Dubbo服务注册发现机制,似乎不太了解。所以我抽空他简单聊了聊我对Dubbo机制的了解。 正文 Java SPI SPI即服务...
  • (2)指供者连接注册中心,并发本机 IP、端口、应用信息提供服务信息发送至注册中心存储 (3) Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信息至注册中心 (4)注册中心根据 消费 者所求服务信息...
  • 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时,只需一个...
  • Dubbo+Nacos实现服务注册和发现

    千次阅读 2020-08-14 09:04:07
    Spring Cloud目前非常流行,Nacos作为新兴的服务注册和发现组件在目前的业界也是非常火,本文力图向大家推荐这款服务注册和发现组件,因为它代表了未来的发展方向。
  • Dubbo和Spring Cloud微服务架构对比——服务注册和发现,精心收集对比,绝对干活,对初学者及有一定使用的基础的绝对使用。
  • Dubbo通常我们是如何使用的? #=========================================================================================================... 三要素:dubbo服务端,dubbo客户端,zookeeper注册中心// 服务...
  • 1.有了解过dubbo的都知道dubbo分为...查阅相关资料之后可以发现dubbo提供的服务注册方式不仅仅xml配置,还有API配置,注解配置,属性配置,其实,细心的你可以发现,xml配置最终也是转化为java代码实现,只是dubbo帮...
  • Dubbo理论简介 Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 官网: ...
  • Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现Dubbo的架构图 各角色说明 Provider 服务提供者(Provider):...
  • 上一篇我们简单介绍了dubbo,并通过一个简单的...作为主流的服务治理组件,Dubbo 提供了很多丰富的功能,那么最根本的 就是要解决大规模集群之后的服务注册和发现的问题。而 dubbo 中对于注 册中心这块是使用zook...
  • 一、Dubbo服务注册成ReferenceBean 上篇一样,消费端也是通过DubboComponentScanRegistrar注册成ReferenceBean,它用到的处理器是ReferenceAnnotationBeanPostProcessor,具体注册过程暂不详细展开,可以自行翻阅...
  • https://blog.csdn.net/weixin_34248849/article/details/89623726 https://xiangxianzui.github.io/2019/08/dubbo%E4%BC%98%E9%9B%85%E4%B8%8B%E7%BA%BF%E5%88%86%E6%9E%90/
  • Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注 册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点 的信息可以在界面中直观的看到。 Eureka C
  • Apache Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现Dubbo的基本概念 服务提供者(Provider):暴露服务服务...
  • Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以 Spring 框架无缝集成。 RPC 指的是远程调用协议,也就是说两个服务器交互数据。 2、Dubbo的由来? ...
  • 目录 1.什么是dubbo?...DUBBO是一个分布式服务框架,致力于提供高性能透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支...
  • dubbo服务

    2021-03-01 17:30:51
    Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以 Spring 框架无缝集成。 RPC 指的是远程调用协议,也就是说两个服务器交互数据。 2.Dubbo的主要应用...
  • 作为主流的服务治理组件,Dubbo提供了很多丰富的功能,那么最根本的就是要解决大规模集群之后的服务注册和发现的问题。而dubbo中对于注册中心这块是使用zookeeper来支撑的。当然在目前最新的版本中。 Dubbo能够支持...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,870
精华内容 748
关键字:

dubbo服务注册和发现