Dubbo 源码解析 - 服务暴露概述

Dubbo 服务暴露是其核心功能之一,它涉及服务的发布、网络监听、协议封装、以及服务注册等关键步骤。以下是Dubbo服务暴露过程的概览和关键步骤:

1. 服务配置初始化

  • Dubbo 服务暴露始于 ServiceConfig 类的实例化,这个类通常由 Spring 容器初始化并配置。
  • ServiceConfig 包含服务提供者的各种配置信息,如接口名、实现类、超时时间、重试策略等。
  • 通过 afterPropertiesSet() 方法触发服务暴露流程,这是 Spring InitializingBean 接口的一部分。

2. 服务导出(Exporter)

  • 本地暴露: 为了支持服务的本地调用或测试,Dubbo 允许服务同时在本地暴露。这通常涉及到创建一个本地 Invoker,并将其封装成 Exporter。
  • 远程暴露: 关键步骤,包括:
    • 协议选择: 根据配置选择合适的协议(如 dubbo、rmi、http 等)。
    • Invoker创建: 将服务接口和实现类包装成 Invoker,Invoker 是实际执行远程调用的对象。
    • Exporter创建: 使用协议处理器(如 NettyServer)创建网络服务端,并将 Invoker 转换成 Exporter 对象,Exporter 负责服务的导出和引用计数。
    • 开启Netty服务: 对于基于Netty的通信,Dubbo会初始化Netty服务器,监听特定端口等待请求。

3. 服务注册

  • 服务导出后,还需将服务的地址、接口信息等元数据注册到注册中心(如 ZooKeeper、Nacos)。
  • 注册过程包括构建注册信息的 URL,然后通过注册中心客户端 API 发送注册请求。

4. 关键类与方法

  • ServiceConfig: 服务配置类,持有服务暴露所需的所有配置信息。
  • Protocol: 协议层接口,定义了服务暴露和引用的规范,如 DubboProtocol 负责具体的网络通信。
  • Invoker: 表示一个可调用服务的实体,包含了服务接口、服务实例及调用参数等信息。
  • Exporter: 服务导出的实体,用于跟踪服务的生命周期,管理 Invoker。
  • Registry: 注册中心接口,定义了与注册中心交互的方法,如注册服务、订阅服务等。

5. 流程概要

  1. 初始化: 通过 Spring 配置或 API 配置创建 ServiceConfig 实例。
  2. 导出服务: 调用 ServiceConfig#export() 方法,进行服务的本地暴露和远程暴露。
    • 本地暴露主要是为了测试和内部调用。
    • 远程暴露涉及选择协议、创建 Invoker 和 Exporter。
  3. 注册服务: 将服务信息注册到配置的注册中心。
  4. 监听与通知: 注册中心负责通知消费者服务的可用性,服务提供者则监听注册中心,以便于服务下线时注销服务。

整个服务暴露过程是 Dubbo 高度可扩展架构的体现,允许用户根据需要选择不同的协议、注册中心等组件。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值