zoukankan      html  css  js  c++  java
  • 深入理解Apache Dubbo与实战 pdf

    服务的暴露过程

    服务器端 ( 服务提供者 ) 在框架启动时 , 会初始化服务实例 , 通过 Proxy 组件调用具体协议 ( Protocol ),
    把服务端要暴露的接口封装成 Invoker ( 真实类型是AbstractProxylnvoker ) , 然后转换成 Exporter, 这个时候框架会打开服务端口等并记录服务实例
    到内存中 , 最后通过 Registry 把服务元数据注册到注册中心 。 这就是服务端 ( 服务提供者 )整个接口暴露的过程 。

    dubbo注册中心

    Dubbo 主要包含四种注册中心的实现 , 分别是ZooKeeper,Redis,Simple,Multicast

    工作流程

    • 服务提供者启动时,会向注册中心写入自己的元数据信息,同时会订阅配置元数据信息 。

    • 消费者启动时,也会向注册中心写入自己的元数据信息,并订阅服务提供者,路由和配置元数据信息

    • 服务治理中心(dubbo-admin)启动时,会同时订阅所有消费者、服务提供者、路由和配置元数据信息

    • 当有服务提供者离开或有新的服务提供者加入时,注册中心服务提供者目录会发生变化,变化信息会动态通知给消费者,服务治理中心

    • 当消费方发起服务调用时,会异步将调用 、 统计信息等上报给监控中心

    • Dubbo 使用 ZooKeeper 作为注册中心时,只会创建持久节点和临时节点两种,对创建的顺序并没有要求

    • 目录示例:

    • 客户端订阅: 客户端第一次连上注册中心 , 订阅时会获取全量的数据 , 后续则通过监听器事件进行更新

    • ZooKeeper的每个节点都有一个版本号,当某个节点的数据发生变化(即事务操作)时 ,
      该节点对应的版本号就会发生变化,并触发 watcher 事件,推送数据给订阅方。版本号强调的
      是变更次数,即使该节点的值没有变化,只要有更新操作,依然会使版本号变化

    dubbo扩展点加载机制

    javaSPI

    具体步骤:
    1.定义一个接口和对应的方法
    2.编写接口的实现类
    3.在META-INF/services/目录下,创建一个以接口全路径命名的文件
    4.文件内容为具体实现类的全路径名
    5.在代码中通过java.util.ServiceLoader来加载具体的实现类




    Dubbo对java的spi机制进行了改进


    在DubboSPI中,我们使用@Adaptive注解,可以动态地通过URL中的参数来确定要使用哪个具体的实现类

    ExtensionLoader工作流程

    这个类实现了配置的加载,扩展类缓存,自适应对象生成

    ExtensionLoader的逻辑入口可以分为getExtension、getAdaptiveExtension、getActivateExtension 三个
    分别是获取普通扩展类、获取自适应扩展类、获取自动激活的扩展类


  • 相关阅读:
    spring 环绕通知 ProceedingJoinPoint 执行proceed方法的作用是什么
    SpringMVC之RequestContextHolder分析
    MySQL中索引不会被用到的情况
    使用Stream快速对List进行一些操作
    Vue中this.$refs[name].resetFields();的使用
    好看的字体
    转,javascript中call()、apply()、bind()的用法终于理解
    vue中的$props
    手机端页面自适应解决方案-rem布局
    查看项目里特定npm包的版本号
  • 原文地址:https://www.cnblogs.com/Baronboy/p/15153251.html
Copyright © 2011-2022 走看看