com+ system application 启动_dubbo启动引导过程(基于2.7.9)

前言

再百度或google上一搜索dubbo服务暴露过程 相关的文章已经有很多了,但是文章

基本都是基于老版本的dubbo,当你对着文章去看下载下来的代码时,会发现很多东西对不上;出于此目的,我便有了自己根据新版本(就目前来讲)的dubbo来写一些关于我自己的理解,如果有不正确的地方,欢迎大家指出。此篇文章主要是我对dubbo服务启动引导的理解,不包括服务暴露的过程。

准备

我们先将dubbo的源码下载下来,地址是 https://github.com/apache/dubbo

啥都不说了,先run起来

  • 启动zookeeper

我们下载好代码,直接用官方的demo来运行。不过呢,你要启动zookeeper;当然,你启动其他的注册中心也可以,不启动也可以,笔者这里使用的docker来启动zookeeper,方便又干净。

docker run -d -P zookeeper

这样我们就有了一个zookeeper的注册中心。-P的含义是随机绑定本机端口,你也可以指定端口,不熟悉docker的同学可以自行搜索下。接下来我们看一下zookeeper的端口号

docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                                NAMES
e22afb746c2b        zookeeper           "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        0.0.0.0:32783->2181/tcp, 0.0.0.0:32782->2888/tcp, 0.0.0.0:32781->3888/tcp, 0.0.0.0:32780->8080/tcp   nifty_black

可以看到zookeeper的2888绑定到了我机器的32782端口

另外,新版的dubbo的三大中心(注册中心、配置中心、元数据中心)是分开的,我们也可以使用同一个zookeeper,为了简单,我这里都用32782端口这个zookeeper了.

  • 配置dubbo

我这里就先用dubbo-demo-xml-provider给大家做示范。将三大中心的zookeeper地址都改为zookeeper://127.0.0.1:32782,这样我们的org.apache.dubbo.demo.provider.Application就可以run起来了。

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><dubbo:application metadata-type="remote" name="demo-provider"/><dubbo:metadata-report address="zookeeper://127.0.0.1:32782"/><dubbo:config-center address="zookeeper://127.0.0.1:32782"/><dubbo:registry address="zookeeper://127.0.0.1:32782"/><dubbo:protocol name="dubbo"/><bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/><dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"/></beans>

至此,我们的dubbo provider就可以成功启动了

dubbo启动过程

首先看一眼我们demo的main方法

public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-provider.xml");context.start();System.in.read();}

很明显,我们demo启动借助的spring。不过这段代码是怎么知道要启动dubbo的呢?它是在spring.handlers文件中加上了如下内容

http://dubbo.apache.org/schema/dubbo=org.apache.dubbo.config.spring.schema.DubboNamespaceHandler
http://code.alibabatech.com/schema/dubbo=org.apache.dubbo.config.spring.schema.DubboNamespaceHandler

spring.handlers在哪里呢?这这里

e49bbde250b48f4d99398c0edd0ddc7f.png
  • 注册dubbo schemas的解析器

这点就不展开讲了。在老版本的dubbo中,这个类的功能也只有这一个。

  • 注册DubboBootstrapApplicationListener

老版本的dubbo是通过ServiceBean继承InitializingBean来实现的,而新版本的则有所改变。新版的dubbo在parse方法中调用了一个方法DubboBeanUtils#registerCommonBeans(BeanDefinitionRegistry registry)这个方法中有一行代码如下

java registerInfrastructureBean(registry, DubboBootstrapApplicationListener.BEAN_NAME,DubboBootstrapApplicationListener.class);

  • DubboBootstrapApplicationListener

DubboBootstrapApplicationListener继承自OneTimeExecutionApplicationContextEventListener,而OneTimeExecutionApplicationContextEventListener继承自ApplicationListenerDubboBootstrapApplicationListener实现了ApplicationListeneronApplicationEvent来监听spring事件,当spring事件为ContextRefreshedEvent时,最终会调dubboBootstrap.start();

  • DubboBootstrap

dubbo启动引导程序,至此,dubbo服务的启动交给了DubboBootstrap.

总结

老版本的dubbo是服务启动是有ServiceBean负责的,ServiceBean通过继承InitializingBean进而实现setApplicationContext方法,来启动dubbo服务,而新版本的是从DubboNamespaceHandler中向spring注册DubboBootstrapApplicationListener来监听spring事件,当事件为ContextRefreshedEvent时,会启调用DubboBootstrap#start来启动dubbo服务。接下的的服务暴露等操作就交由DubboBootstrap去完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数计算 GB 镜像秒级启动:下一代软硬件架构协同优化

简介&#xff1a;本文将介绍借助函数计算下一代 IaaS 底座神龙裸金属和安全容器&#xff0c;进一步降低绝对延迟且能够大幅降低冷启动频率。 作者&#xff1a;修踪 背景 函数计算在 2020 年 8 月创新地提供了容器镜像的函数部署方式。AWS Lambda 在 2020 年 12 月 Re-Invent…

为什么服务端程序都需要先 listen 一下?

作者 | 张彦飞allen来源 | 开发内功修炼大家都知道&#xff0c;在创建一个服务器程序的时候&#xff0c;需要先 listen 一下&#xff0c;然后才能接收客户端的请求。例如下面的这段代码我们再熟悉不过了。int main(int argc, char const *argv[]) {int fd socket(AF_INET, SOC…

10个Bug环环相扣,你能解开几个?

简介&#xff1a;由阿里云云效主办的2021年第3届83行代码挑战赛已经收官。超2万人围观&#xff0c;近4000人参赛&#xff0c;85个团队组团来战。大赛采用游戏闯关玩儿法&#xff0c;融合元宇宙科幻和剧本杀元素&#xff0c;让一众开发者玩得不亦乐乎。 今天请来决赛赛题设计者…

小小智慧树机器人_国网营业厅“AI新势力”,科沃斯商用机器人解锁智慧服务新模式!...

智慧营业厅新格局&#xff0c;AI机器人成标配&#xff1f;AI加持&#xff0c;万物互联、万物智能。2019年&#xff0c;应用人工智能的门槛下降&#xff0c;大量人工智能催生的新产品、服务和最佳实践轮番出现。人工智能正在重塑各行各业&#xff0c;传统营业厅网点该如何搭上AI…

AIoT时代存储如何升级?长江存储发布高速闪存芯片UFS 3.1

2022年4月19日&#xff0c;长江存储科技有限责任公司&#xff08;简称“长江存储”&#xff09;宣布推出UFS 3.1通用闪存——UC023。这是长江存储为5G时代精心打造的一款高速闪存芯片&#xff0c;可广泛适用于高端旗舰智能手机、平板电脑、AR/VR等智能终端领域&#xff0c;以满…

零信任策略下云上安全信息与事件管理实践

简介&#xff1a;随着企业数字化转型的深入推进&#xff0c;网络安全越来越被企业所重视。为了构建完备的安全防御体系&#xff0c;企业通常会引入了防火墙(Firewall)、防病毒系统(Anti-Virus System&#xff0c;AVS)、入侵防御系统(Intrusion Prevention System&#xff0c;IP…

kl散度度量分布_数据挖掘比赛技巧——确定数据同分布

在数据挖掘比赛中&#xff0c;很重要的一个技巧就是要确定训练集与测试集特征是否同分布&#xff0c;这也是机器学习的一个很重要的假设[1]。但很多时候我们知道这个道理&#xff0c;却很难有方法来保证数据同分布&#xff0c;这篇文章就分享一下我所了解的同分布检验方法。封面…

Inclavare Containers:云原生机密计算的未来

简介&#xff1a;本文为你详细的梳理一次 Inclavare Containers 项目的发展脉络&#xff0c;解读它的核心思想和创新技术。 作为业界首个面向机密计算场景的开源容器运行时&#xff0c;Inclavare Containers 项目于 2020 年 5 月开源&#xff0c;短短一年多时间内发展势头非常迅…

没有操作系统程序可以运行起来吗?

作者 | 陆小风来源 | 码农的荒岛求生现在的程序员对操作系统已经习以为常了&#xff0c;但是你有没有想过&#xff0c;如果没有操作系统的话我们可以让程序运行起来吗&#xff1f;先说答案&#xff0c;当然是可以的&#xff0c;而且必须是可以的。你可以从这个角度来思考&#…

sysAK(青囊)系统运维工具集:如何实现高效自动化运维?| 龙蜥技术

简介&#xff1a;What is sysAK、典型工具介绍、开源 3 方面介绍了 sysAK 系统&#xff0c;目前 sysAK 工具集已经在龙蜥社区开源&#xff0c;并且在系统运维 SIG、跟踪诊断 SIG 一起共建&#xff0c;希望大家后期加入 SIG 一起讨论共建。 编者按&#xff1a;本文整理自「云栖…

quill鼠标悬浮 出现提示_CHERRY MC8.1鼠标评测:超前设计延续军火箱信仰

CHERRY作为机械键盘品牌拥有非常高的知名度&#xff0c;许多朋友的第一把机械键盘就是CHERRY品牌。在CHERRY产品线中&#xff0c;最具信仰的一定是军火箱MX8.0键盘。键盘本身手感颜值俱佳&#xff0c;独特的军火箱包装更是收获了大批粉丝。至于最配这把键盘的鼠标却一直让网友们…

高并发IO的底层原理

作者 | 阿辉来源 | Andy阿辉思考&#xff1a;作为程序员的我们&#xff0c;在编写软件进行文件读取&#xff0c;网络收发数据时&#xff0c;是不关心其具体的内部数据传输的。只关心把数据传输到缓冲区或及时从缓冲区读取数据。那么内部究竟是如何实现的呢&#xff0c;今天这篇…

新能源汽车太猛了,这些卡脖子技术你了解吗?

简介&#xff1a;从汽车行业的变化&#xff0c;我们即可初步看出芯片的重要性&#xff0c;那么&#xff0c;芯片对汽车行业的发展具体有哪些重要影响呢&#xff1f; 根据全球汽车咨询机构Auto Forecast Solutions统计的数据&#xff0c;截至10月10日&#xff0c;由于芯片短缺&…

龙蜥社区成立系统运维SIG,开源sysAK系统运维工具集

简介&#xff1a;系统运维SIG致力于打造一个集主机管理、配置部署、监控报警、异常诊断、安全审计等一系列功能的自动化运维平台。 OpenAnolis 龙蜥社区&#xff08;以下简称“龙蜥社区”&#xff09;正式成立系统运维&#xff08;System Operation&Maintenance, sysOM&…

奔跑吧兄弟变成机器人是哪一期_奔跑吧预告,郑恺郭麒麟回归,而我却被女嘉宾的颜值吸引了...

哈喽小伙伴们&#xff0c;近期大家都看了《奔跑吧黄河篇》吗&#xff1f;现在已经播到第二期了&#xff0c;相信大家依旧是对跑男系列节目非常感兴趣的&#xff0c;播放量非常高&#xff0c;稳稳占据TX和AQY两大视频平台的综艺播放第一名的位置&#xff0c;可见网友们真的是非常…

院士专家热议如何拥抱“东数西算”,第二届中国IDC行业Discovery大会顺利召开

4月21日&#xff0c;一场别开生面的主题为“聚光奔赴”的数据中心行业大会圆满落下帷幕。由中国通信工业协会数据中心委员会指导&#xff0c;中国IDC圈与世纪互联共同主办的“2022年第二届中国IDC行业Discovery大会”在线上召开&#xff0c;会议聚焦国家“双碳”目标、“东数西…

一文理解 K8s 容器网络虚拟化

简介&#xff1a;本文需要读者熟悉 Ethernet&#xff08;以太网&#xff09;的基本原理和 Linux 系统的基本网络命令&#xff0c;以及 TCP/IP 协议族并了解传统的网络模型和协议包的流转原理。文中涉及到 Linux 内核的具体实现时&#xff0c;均以内核 v4.19.215 版本为准。 作者…

应对 Job 场景,Serverless 如何帮助企业便捷上云

简介&#xff1a;函数计算作为事件驱动的全托管计算服务&#xff0c;其执行模式天生就与这类 Job 场景非常契合&#xff0c;对上述痛点进行了全方面的支持&#xff0c;助力“任务”的无服务器上云。 作者&#xff1a;冯一博 任务&#xff08;Jobs&#xff09;&#xff0c;是互…

Gartner发布新兴技术研究:深入洞悉元宇宙

供稿 | Gartner 出品 | CSDN云计算 根据Gartner预测&#xff0c;2026年全球30%的企业机构将拥有元宇宙产品和服务。 元宇宙是一个由独立但相互连接的网络所组成的持久、沉浸式数字环境&#xff0c;但目前尚未确定这些网络将使用的通信协议。元宇宙能够实现持久、去中心化、可…

双11实时物流订单实践

简介&#xff1a;随着双11的开启&#xff0c;物流业也迎来了年度大考。2021年双11期间&#xff0c;递四方作为物流仓储服务方&#xff0c;布局仓库和分拣点超40个&#xff0c;50w平米作业场地&#xff0c;单日订单峰值达千万级别&#xff0c;海量购物订单由递四方配送到家&…