dubbo原理<二> 流程入口+ 参数配置
发布日期:2022-02-26 14:49:43 浏览次数:45 分类:技术文章

本文共 4025 字,大约阅读时间需要 13 分钟。

文章目录


前言

文章讲解spring如何集成dubbo,以及dubbo Api 方式集成和常用配置


一、spring 自定义标签解析过程:

1、spring初始化容器时,创建BeanFactory对象后会调用loadBeanDefinitions加载配置文件中的信息

2、从root节点解析出命名空间,再从 META-INF/spring.schemas 文件中找到对应的命名空间描述规则文件dubbo.xsd,检查xml是否正确
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210317142459228.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMyMTI5Mzcx,size_16,color_FFFFFF,t_70在这里插入图片描述
3、后续在DefaultBeanDefinitionDocumentReader类的parseBeanDefinitions

parseDefaultElement(ele, delegate);// 处理默认命名空间节点,例如: 
parseCustomElement(ele);// 1.2 自定义命名空间节点的处理 String namespaceUri = getNamespaceURI(ele);//获取xml文件命名空间如: http://www.springframework.org/schema/beans NamespaceHandler handler = this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri); // 从所有类路径资源(META-INF/spring.handlers)加载命令空间和解析器配置,然后实例化解析器,调用init方法初始化返回 handler.parse(ele, new ParserContext(this.readerContext, this, containingBd));//使用解析器解析节点

二、dubbo的配置文件处理:

1、dubbo.jar下的META-INF/spring.handlers中有:

在这里插入图片描述

在这里插入图片描述

三、spring容器在实例化ReferenceBean 时、进行服务引用:

在这里插入图片描述

四、spring容器初始化后通知ServiceBean 进行服务暴露:

在这里插入图片描述

五、综上所述dubbo的流程可以简化为:

ApplicationConfig appConfig = new ApplicationConfig(name);//当前应用配置 相当于<dubbo:application name=“app”/>

RegistryConfig registry = new RegistryConfig(); //注册中心配置 相当于<dubbo:registry protocol=“zookeeper” > address=“172.0.0.1:2181”/>
registry.setAddress(“127.0.0.1:2181”);
registry.setProtocol(“zookerper”);
ProtocolConfig protocol = new ProtocolConfig(); //相当于<dubbo:protocol name=“dubbo” port=“20885”/ >
protocol.setName(“dubbo”);
protocol.setPort(12345);
ServiceConfig serviceConfig = new ServiceConfig(); //相当于<dubbo:service interface=“服务接口名” ref=“接口实现类” />
serviceConfig.setInterface(XxxService.class);
serviceConfig.setRef(XxxService);
serviceConfig.setApplication(appConfig);
serviceConfig.setRegistry(registryConfig);
serviceConfig.setProtocol(protocolConfig);
serviceConfig.export();//服务暴露
ReferenceConfig referenceConfig=new ReferenceConfig();//相当于<dubbo:reference interface=“服务接口名”/>
referenceConfig.setApplication(applicationConfig);
referenceConfig.setRegistry(registryConfig);
referenceConfig.setInterface(XxxService.class);
XxxService xxxService = referenceConfig.get()//服务引用、并得到对应的invoker对象,用于rpc调用

六:为了方便后续讲解原理对各种config配置对象及其参数的理解;这里整理了dubbo常用配置详解:

1、
说明:应用信息配置,用于配置当前应用信息,不管该应用是提供者还是消费者2、
标签,必填” protocol=“注册中心通信协议,zookeeper,redis可选,默认dubbo” username=“注册中心登录用户名,可选” password=“注册中心登录密码,可选” id="代表这个注册中心的bean,多个注册中心的时候会在service/reference中指定,可选" timeout=“注册中心请求超时时间,可选” check="boolean值,控制注册中心不存在是否报错,可选 register=“boolean值,控制是否想注册中心注册,但是可以订阅,可选” subscribe=“boolean值,控制是否向注册中心订阅,,但是可以注册,可选” file=“使用文件缓存注册中心地址列表及服务提供者列表,应用重启时将基于此文件恢复,可选” file="${HOME}/.dubbo/dubbo_registry_ai_match_service.cache" ${HOME}在linux系统代表软件路径,window没有所以本地启动有这个会报错/> 说明:代表注册中心配置,向注册中心注册,用于配置连接注册中心相关信息,如果有多个不同的注册中心, 可以声明多个
标签,并在
的registry属性指定使用的注册中心id。3、
代表的是如何通信的封装、还有参数如:threads/dispatcher all/threadpool /codec指定接收到信息后如何解码,分配到什么线程池、用多少线程进行处理消息说明:服务提供者协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。, 如果需要支持多协议,可以声明多个
标签,并在
中通过protocol属性指定使用的协议。 适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议、默认的是dubbo长链接、还有hessian、rmi、thrift、redis、http等协议4、
的id属性,多个协议ID用逗号分隔,可选” proxy=“默认javassist,代理ref的invoker类用什么技术实现;可选jdk”, scope="控制服务暴露到本地还是远程,默认空,都暴露;可以为remote/local/none都不暴露", registry=“向多个注册中心注册时用,值为
的id属性,多个注册中心ID用逗号分隔,” registry=“booealn值如果不想将该服务注册到任何registry,可选/>说明:服务提供者暴露服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。5、
的id属性,多个注册中心ID用逗号分隔,可选” loadbalance="consistenthash"指定负载均衡策略/>说明:服务消费者引用服务配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心6、
7、
说明:服务提供者缺省值配置,该标签为
标签的缺省值设置。8、
说明:服务消费者缺省值配置,该标签为
标签的缺省值设置9、
细分到方法
服务回调

七、zk上注册的节点:

zk上的节点路径格式为: /{

rootpath}/{
category}/节点协议://ip:port/interfaceName?各种参数……

rootpath 默认为 dubbo

category 有:providers、consumers、configurators、routers


总结

dubbo根据spring扩展的自定义命名空间,定义了自己配置文件的处理,然后使用DubboNameSpaceHandler生成各种配置文件对象,其中服务暴露以ServiceBean为入口,服务引用以ReferenceBean为入口,启动dubbo服务;

转载地址:https://blog.csdn.net/qq_32129371/article/details/114928795 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Dubbo原理<一> Dubbo SPI详解
下一篇:Dubbo原理<三> 服务暴露

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月21日 22时51分37秒