学习小记--Dubbo基础浅析(服务暴露、服务引入)

本文深入解析了Dubbo这款高性能Java RPC框架的结构与工作原理,包括其支持的多种协议及推荐使用的Dubbo协议。详细介绍了Dubbo的十层架构体系,并阐述了服务暴露和服务引入的具体流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dubbo基础浅析

  • 是一款高性能的Java RPC框架 --远程过程调用

  • 其中Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等。

    推荐使用的是dubbo协议.

  • 层级

第一层:service层,接口层,给服务提供者和消费者来实现的
第二层:config层,配置层,主要是对dubbo进行各种配置的,ServiceConfig 和 ReferenceConfig。
第三层:proxy层,服务代理层,透明生成客户端的stub和服务单的skeleton
第四层:registry层,服务注册层,负责服务的注册与发现
第五层:cluster层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务,还还负责远程调用失败的容错措施。
第六层:monitor层,监控层,对rpc接口的调用次数和调用时间进行监控
第七层:protocol层,远程调用层,封装rpc调用
第八层:exchange层,信息交换层,封装请求响应模式,同步转异步
第九层:transport层,网络传输层,抽象mina和netty为统一接口
第十层:serialize层,数据序列化层

在这里插入图片描述
服务暴露过程
业务流程:

  1. Provider启动。
  2. 通过Proxy,根据协议Protocol将接口包装成Invoker
  3. 再经过Exporter包装一层,目的为了在注册中心暴露自己。
  4. Exporter通过 Registry 注册到注册中心。

代码流程:

  1. 起始于 Spring IOC 容器刷新完毕之后。
  2. 根据配置参数组装成 URL。
  3. 根据 URL 的参数来进行本地或者远程调用。
  4. 通过 proxyFactory.getInvoker,利用 javassist 来进行动态代理,封装真的实现类。
  5. 通过 URL 参数选择对应的协议来进行 protocol.export,默认是 Dubbo 协议。
  6. 第一次暴露的时候会调用 createServer 来创建 Server,默认是 NettyServer。
  7. 将 export 得到的 exporter 存入一个 Map 中。
  8. 向注册中心注册提供者的信息。

服务引入过程

业务流程:

  1. 消费者启动会向注册中心拉取服务提供者的元信息。 Proxy调用Invoker对象。
  2. 通过Directory获取所有可以调用的Invoker列表。
  3. 通过 LoadBalance从Invoker列表 做负载均衡选取一个。
  4. 再经过 Filter 做一些统计筛选。
  5. Client 做数据传输(Netty )。
  6. 经过 Codec 接口做协议构造,再序列化。

代码流程:

  1. 饿汉式就是加载完毕就会引入,懒汉式是只有当这个服务被注入到其他类中时启动引入流程,默认是懒汉式。
  2. 检查配置,通过配置构建出一个map。
  3. 根据map组装成 URL 。
  4. 单个URL,根据URL上的协议调用不同的Prorocol.refer,得到相应的invoker(调用 RegistryProtocol 的 refer 构建 Invoker 实例)。
  5. 如果有多个注册中心或多个服务提供者,则遍历生成invoker(调用 RegistryProtocol 的 refer 构建 Invoker 实例),并构建StaticDirectory,再由封装成一个invoker对象。

refer过程如下:

  1. 构建 RegistryDirectory 向注册中心注册消费者的信息,并且订阅提供者、配置、路由等节点。
  2. 进入 Dubbo 协议的引入,创建 Invoker,期间会包含 NettyClient,来进行远程通信。
  3. 最后通过 Cluster 来包装 Invoker,默认是 FailoverCluster,最终返回代理类。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值