`
ncs123
  • 浏览: 103406 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Dubbo之服务发现

阅读更多
一、Dubbo简介
    Apache Dubbo (incubating) |ˈdʌbəʊ| is a high-performance, java based RPC framework open-sourced by Alibaba. As in many RPC systems, dubbo is based around the idea of defining a service, specifying the methods that can be called remotely with their parameters and return types. On the server side, the server implements this interface and runs a dubbo server to handle client calls. On the client side, the client has a stub that provides the same methods as the server.


二、服务发现

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

  java.lang.Thread.State: RUNNABLE
	  at com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry.doSubscribe(ZookeeperRegistry.java:175)
	  at com.alibaba.dubbo.registry.support.FailbackRegistry.subscribe(FailbackRegistry.java:212)
	  at com.alibaba.dubbo.registry.integration.RegistryDirectory.subscribe(RegistryDirectory.java:138)
	  at com.alibaba.dubbo.registry.integration.RegistryProtocol.doRefer(RegistryProtocol.java:277)
	  at com.alibaba.dubbo.registry.integration.RegistryProtocol.refer(RegistryProtocol.java:260)
	  at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.refer(ProtocolFilterWrapper.java:60)
	  at com.alibaba.qos.protocol.QosProtocolWrapper.refer(QosProtocolWrapper.java:45)
	  at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.refer(ProtocolListenerWrapper.java:67)
	  at com.alibaba.dubbo.rpc.Protocol$Adaptive.refer(Protocol$Adaptive.java:-1)
	  at com.alibaba.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:422)
	  at com.alibaba.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:317)
	  at com.alibaba.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:147)
	  - locked <0xaeb> (a com.alibaba.dubbo.config.spring.ReferenceBean)
	  at com.alibaba.dubbo.config.spring.ReferenceBean.getObject(ReferenceBean.java:130)
	  at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:168)
	  at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:103)
	  - locked <0xb51> (a java.util.concurrent.ConcurrentHashMap)
	  at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1517)
	  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:251)
	  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	  at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:461)
	  at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:435)
	  at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:559)
	  at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)
	  at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
	  at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:305)
	  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
	  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
	  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
	  at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
	  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
	  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
	  at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
	  at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
	  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)

  • 21行:spring中用到了dubbo的服务,spring会调用AbstractBeanFactory.getBean()去获取这个bean
  • 19行:dubbo服务在客户端都是以<dubbo:reference标签配置的,每一个配置都是一个ReferenceBean,ReferenceBean实现了FactoryBean,所以会最终调用FactoryBeanRegistrySupport.getObjectFromFactoryBean()

  • 12-13行:如果这个dubbo服务类还没有被实例化,会先调用ReferenceConfig.init方法进行实例化,init方法中先合并application,module,consumer,reference中的配置,然后会调用ReferenceConfig.createProxy()生成一个dubbo服务代理类


  • 11行:运用了扩展点,refprotocol.refer(interfaceClass, url)最终会调用RegistryProtocol.refer()组装了一个Invoker对象,最后通过proxyFactory.getProxy(invoker)生成一个代理(dubbo默认使用了javassist)

  • 6行:registryFactory.getRegistry(url),通过url中的协议创建相应的注册中心,我们这里是ZookeeperRegistry,ZookeeperRegistry是AbstractRegistry的子类,在AbstractRegistry的构造方法中,首先会加载本地的注册中心的对应dubbo服务,然后会定时把最新的dubbo服务对应关系刷新到本地



  • 5行:zookeeper注册中心,每个服务下都有这四个配置[configurators, consumers, providers, routers], registry.register()方法会先把Consumer注册到注册中心sonsumers目录下,directory.subscribe()会订阅和监听configurators,providers,routers目录


  • 2行:遍历了configurators,providers,routers目录,监听和获取子目录,providers目录下就是可用的dubbo服务providers。新的providers的加入和下架都会通过这里的监听,回调Consumers。




  • 大小: 29.6 KB
  • 大小: 116.2 KB
  • 大小: 150.7 KB
  • 大小: 129.8 KB
  • 大小: 105.9 KB
  • 大小: 155.5 KB
  • 大小: 99.3 KB
  • 大小: 150.2 KB
分享到:
评论

相关推荐

    Dubbo服务注册与发现.doc

    本文档旨在讲解 Dubbo 服务注册与发现的相关知识点,涵盖了分布式系统的基本理论、Dubbo 理论简介、Dubbo 环境搭建等方面。 一、分布式基本理论 分布式系统是由若干独立计算机的集合,这些计算机对于用户来说就像...

    Dubbo和Spring Cloud微服务架构对比——服务注册和发现.docx

    - **服务发现机制**:Dubbo使用Zookeeper进行服务发现,当一个服务实例加入或离开集群时,Zookeeper能够感知并通知其他服务。 - **服务管理**:Dubbo支持服务版本管理和权重控制等功能,便于服务治理。 2. **...

    基于zookeeper 监控dubbo provider 下线,提供dubbo 服务下线 邮箱预警

    - 这意味着监控系统是独立于Dubbo服务的,不需要修改Dubbo Provider或Consumer的原有代码,只需要在监控系统中实现监控逻辑,这样可以保持服务代码的纯净,降低维护成本。 5. **独立部署的JAR**: - 该项目作为一...

    dubbo拆分服务实例.rar

    《Dubbo服务拆分实践详解》 在现代企业级应用开发中,微服务架构成为主流,而Dubbo作为阿里巴巴开源的高性能Java RPC框架,广泛应用于服务拆分与治理。本实例将深入探讨如何利用Dubbo进行服务的拆分,通过"用户服务...

    dubbo-admin:dubbo服务监控

    【标题】"dubbo-admin:dubbo服务监控" 指的是Dubbo生态系统中的一个关键组件,用于管理和监控Dubbo服务。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,广泛应用于分布式系统中。它提供了一整套服务治理...

    dubbo的服务发布与服务引用

    总结,Dubbo的服务发布与服务引用涉及配置解析、服务暴露、注册中心交互、服务发现、负载均衡以及远程调用等多个环节。通过对源码的深入分析,我们可以更清晰地了解这些流程,从而更好地理解和优化Dubbo的应用。

    服务治理工具dubbo

    Dubbo是一款由阿里巴巴开源的高性能、轻量级的服务治理框架,它致力于提供一套完整的服务治理解决方案,包括服务注册、服务发现、服务调用、负载均衡、熔断机制等核心功能,是分布式微服务架构中的重要组件。...

    dubbo服务注册到eureka.zip

    - 启动 Dubbo 服务消费者,通过调用服务接口进行测试,验证服务发现功能是否正常。 完成以上步骤后,Dubbo 服务就可以顺利地注册到 Eureka 中,实现服务的动态注册与发现。这种集成方式有助于在微服务架构中构建更...

    Dubbo分布式服务管理

    三、Dubbo服务的生命周期 1. 创建服务提供者:配置服务接口、实现类、版本等信息,然后启动服务。 2. 注册服务:服务提供者启动后,会将服务信息注册到注册中心。 3. 发现服务:服务消费者从注册中心获取服务提供...

    dubbo 服务提供方 服务消费方

    本篇文章将深入探讨Dubbo服务提供方(Provider)和服务消费方(Consumer)的核心概念、实现原理以及如何通过代码进行交互。 1. **Dubbo服务提供方(Provider)** - **服务注册与发现**:服务提供方在启动时,会将...

    Dubbo分布式服务框架

    【Dubbo分布式服务框架】是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了丰富的服务治理功能,包括服务注册、服务发现、负载均衡、容错机制等,旨在提高微服务架构下的服务调用效率和系统稳定性。Dubbo...

    Dubbo分布式服务框架入门2

    Dubbo是中国阿里巴巴开源的一款高性能、轻量级的Java分布式服务框架,它主要为了解决企业应用之间的服务调用问题,提供了服务注册、服务发现、负载均衡、容错处理等一系列完整的服务治理功能。在这个"Dubbo分布式...

    dubbo资源 dubbo-admin dubbo demo

    在这个资源包中,我们关注的焦点是Dubbo-admin,它是Dubbo服务治理的核心工具,以及一个基础的Dubbo示例项目。 【描述】提到的" dubbo资源"暗示了这个压缩包可能包含了Dubbo的源码、配置文件、文档、或者是与之相关...

    springboot集成dubbo实现服务提供调用

    3. **启动服务消费者**:接着运行服务消费者模块,消费者会自动发现并消费服务提供者提供的服务。 4. **测试调用**:通过发送HTTP请求到服务消费者的`/hello`接口,查看返回结果,验证服务调用是否成功。 ### 五、...

    dubbo本地测试服务

    "**dubbo-testingtool本地测试**"可能是提供的一套测试工具或脚本,用于简化本地Dubbo服务的测试过程。这套工具可能包括自动化的测试框架、测试数据生成器、日志分析等功能,帮助开发者更高效地进行本地测试。 六、...

    dubbo服务提供demo

    Dubbo服务提供方示例详解 在分布式系统中,Dubbo作为一个高性能、轻量级的服务治理框架,被广泛应用于服务的发布与消费。本篇将深入解析如何创建一个基于Dubbo的服务提供方(Provider)的Demo,以帮助理解其核心...

    dubbo 分布式服务框架 开发者学习文档 PDF格式

    其次,服务动态寻址与路由是Dubbo服务治理的关键特性。服务提供者在启动时会向注册中心注册自己的服务,服务消费者则可以通过注册中心获取服务提供者的地址,实现服务的动态发现。同时,Dubbo支持基于规则的服务路由...

    dubbo-api服务

    "dubbo-api服务"就是这样的一个组件,它是基于阿里巴巴开源的Dubbo框架构建的服务器端接口服务。Dubbo是一个高性能、轻量级的Java远程服务调用框架,它使得服务提供者和服务消费者之间能够高效地进行通信。 首先,...

    dubbo服务监控工具dubbo-admin

    【dubbo服务监控工具dubbo-admin详解】 Dubbo-admin,作为阿里巴巴开源的分布式服务框架Dubbo的重要组成部分,是一个强大的服务治理工具,专为诊断和管理Dubbo服务而设计。它提供了一个直观的用户界面,使得开发者...

    dubbo服务和消费

    《Dubbo服务与消费详解》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java RPC框架,已经在分布式系统领域广泛应用。本项目基于Maven构建,涵盖了服务提供者(Provider)和服务消费者(Consumer)两个核心组件...

Global site tag (gtag.js) - Google Analytics