dubbo配置调用本地_理解 Dubbo 服务暴露

本文详细探讨了Dubbo服务暴露的流程,包括本地暴露、网络暴露和注册中心暴露。服务暴露涉及容器初始化、ServiceBean、ApplicationListener、Invoker、Exporter等关键概念。本地暴露通过injvm协议,网络暴露则涉及Transporter、Exchanger等网络通信组件,注册中心暴露则是服务URL向注册中心注册的过程。
摘要由CSDN通过智能技术生成

说明

本文只探讨 dubbo 服务暴露的相关内容 , 服务暴露可以划分为本地暴露 , 网络暴露 , 注册中心暴露这三部分 , 对照 Dubbo Architecture 中的 0. start , 1.register 这两部分。也可以说是 provider 的发布过程。本人能力有限不能将所有细节探究的很清楚,希望能和大家多交流相互学习。

89e6a116c80d8cc1dd75cf2b4d09a82a.png

dubbo 服务暴露顺序

服务的暴露过程大致上分为四个过程 ,容器初始化 , 服务本地暴露 , 服务网络暴露 , 服务注册中心暴露。

a5af34c6e8d5efb0fb3e4386b97addb1.png

在容器初始化时会读取配置文件并解析 , dubbo 使用

com.alibaba.dubbo.config.spring.schema.DubboBeanDefinitionParsercom.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler

来进行配置文件的解析 , 解析每一个 配置时都会对应的在 spring 容器中初始化一个 ServiceBean 的实例对象 , ServiceBean 中封装了用户自定义的服务接口实现类的实例对象。 ServiceBean 实现了 spring 的 ApplicationListener 接口 , 会对容器发生的事件进行处理 , 当有事件发布时 spring 调用每一个 Listener 的 onApplicationEvent 方法 , dubbo 服务暴露就是在这个过程中完成的。服务暴露的范围是可以配置的 , 在 scope 可选配置 "none" (不暴露服务) , "local" (本地暴露), "remote" (网络暴露,注册中心暴露)。没有指定默认进行 remote 暴露处理。

public void onApplicationEvent(ApplicationEvent event) {        if (ContextRefreshedEvent.class.getName().equals(event.getClass().getName())) {            if (isDelay() && !isExported() && !isUnexported()) {                if (logger.isInfoEnabled()) {                    logger.info("The service ready on spring started. service: " + getInterface());                }                // dubbo 服务暴露                export();            }        }    }

dubbo 服务本地暴露

dubbo 在进行服务的本地暴露时会将 host , port , protocol (dubbo 中的 protocol) 进行修改,host 会改为 127.0.0.1 , port 改为 0 , protocol 改为 injvm , 得到的 URL 类似这样 :

injvm://127.0.0.1/net.j4love.dubbo.quickstart.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值