当前位置: 首页 > news >正文

dubbo服务暴露流程

IOC容器启动过程中spring加载配置文件完成初始化过程中,dubbo标签处理器会解析标签并分装成对应的组件

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

@Override
    public void init() {
        registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));
        registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true));
        registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));
        registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));
        registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));
        registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));
        registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));
        registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));
        registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));
        registerBeanDefinitionParser("annotation", new AnnotationBeanDefinitionParser());
    }

其中serviceBean.class实现了InitializingBean 、ApplicationListener 这两个接口,实现了以下2个方法

// 监听ContextRefreshedEvent事件:IOC容器刷新完成,即所有对象创建完成,会调用
public void onApplicationEvent(ContextRefreshedEvent event) {
}

// serviceBean容器创建完成对象后调用:属性设置完之后会回调这个方法
public void afterPropertiesSet() throws Exception {
}

之后的流程,可以debug这2个方法具体看下,特别是onApplicationEven中的export()方法

服务暴露关键代码:
com.alibaba.dubbo.registry.integration.RegistryProtocol#doLocalExport

// 启动netty服务器,监听对应端口的dubbo服务
com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol#openServer(基于netty的服务暴露)

com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol#createServer

注册表:com.alibaba.dubbo.registry.support.ProviderConsumerRegTable

dubbo服务的注册表信息:每一个dubbo服务已经对应的url信息会保存在注册表中

rul地址,已经对应的服务执行器信息

public class ProviderConsumerRegTable {
    public static ConcurrentHashMap<String, Set<ProviderInvokerWrapper>> providerInvokers = new ConcurrentHashMap<String, Set<ProviderInvokerWrapper>>();
    public static ConcurrentHashMap<String, Set<ConsumerInvokerWrapper>> consumerInvokers = new ConcurrentHashMap<String, Set<ConsumerInvokerWrapper>>();
}

 

相关文章:

  • 人老了才明白,走到最后,身边能依靠的不是老伴,也不是子女
  • PySpark SQL模块官方文档
  • 独立三方数据源!数据宝国有大数据为金融机构及物流企业提供双向赋能
  • Vuehtml2pdf的使用
  • java计算机毕业设计图书馆管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • 南京国家农创聚功能性农业主导产业 国稻种芯百团计划行动
  • A. Balance the Bits (思维构造)
  • k8s系列(二)——云计算相关概念
  • 数据挖掘学习笔记01——数据挖掘的基本流程
  • 分布式缓存Hazelcast的部署及与SpringBoot整合使用
  • 1.5 Elasticsearch文档的基本操作
  • 微电网|含分布式发电的微电网中储能装置容量优化配置(Matlab代码实现)
  • postgresql 服务器日志
  • c++ 中map 的find 用法
  • 《MeInGame: Create a Game Character Face from a Single Portrait 》论文解读
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【个人向】《HTTP图解》阅后小结
  • Android 控件背景颜色处理
  • ES2017异步函数现已正式可用
  • in typeof instanceof ===这些运算符有什么作用
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • PHP 小技巧
  • Promise面试题,控制异步流程
  • Python3爬取英雄联盟英雄皮肤大图
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SSH 免密登录
  • sublime配置文件
  • 动态规划入门(以爬楼梯为例)
  • 聊聊hikari连接池的leakDetectionThreshold
  • 深入浏览器事件循环的本质
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 一个JAVA程序员成长之路分享
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • $.ajax()
  • $GOPATH/go.mod exists but should not goland
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (原)Matlab的svmtrain和svmclassify
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 中创建支持集合初始化器的类型
  • .NET中使用Protobuffer 实现序列化和反序列化
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [2023-年度总结]凡是过往,皆为序章
  • [Android] Amazon 的 android 音视频开发文档
  • [ANT] 项目中应用ANT
  • [APIO2015]巴厘岛的雕塑
  • [BT]BUUCTF刷题第4天(3.22)
  • [hive小技巧]同一份数据多种处理
  • [Labtools 27-1429] XML parser encountered a problem in file