Dubbo: 在springboot中的启动过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo: 在springboot中的启动过程相关的知识,希望对你有一定的参考价值。

参考技术A SpringBoot在启动时,通过ConfigurationClassPostProcessor.postProcessBeanFactory完成对依赖jar包中XxAutopConfiguration类的注册,自然DubboAutoConfiguration也会被注册到容器内部。

DubboAutoConfiguration中,定义了一个ServiceClassPostProcessor ,同样会被注册到容器内。

ServiceClassPostProcessor 实现了BeanDefinitionRegistryPostProcessor接口,同样他也是一个BeanFactoryPostProcessor。

在SpringBoot刷新容器,调用所有BeanFactoryPostProcessors时,对BeanDefinitionRegistryPostProcessor,会去调用其postProcessBeanDefinitionRegistry方法。

至此,便将ServiceBean注册进了Spring IOC容器。至于对象和代理对象的创建,那是后话了。

我们知道DubboService会被注册到注册中心,最终的结果是:将服务名、服务对外暴露的url等信息通过网络请求发送到注册中心,那么对外暴露的时机是什么时候?它又是如何做到这件事情的?
关于时机,它应该在容器刷新完成之后将所有DubboService对外暴露,那么如何感知到容器刷新呢?SpringBoot中可以注册listener,容器开始启动、启动完成等事件会通知注册进来的listener。
ServiceClassPostProcessor 除了向容器注册ServiceBean之外,还注册了一个监听器:DubboBootstrapApplicationListener,当感知到容器刷新完成和关闭事件时,做出相应处理,在这里关注刷新完成该如何处理。

启动DubboBootStrap

至于Service如何暴露:如下图

最后服务暴露到底对外暴露了个啥呢?其实就是invoker的url,当consumer发起服务调用的时候,发起请求,当provider接收到请求之后,将请求携带的信息(接口、方法名、参数数组...)封装为Invocation对象,分派到相应的invoker,通过invoker.invoke(invocation)完成调用。
另外敖丙的文章也还不错, Dubbo系列之服务暴露过程

从springboot解析@DubboReference开始讲起。
DubboAutoConfiguration被@EnableDubboConfig注解,通过该注解引入了DubboConfigConfigurationRegistrar类。

DubboConfigConfigurationRegistrar::registerBeanDefinitions(args)

ReferenceAnnotationBeanPostProcessor是一个InstantiationAwareBeanPostProcessorAdapter,在对象实例化后,填充属性中,会调用其postProcessPropertyValues

最终到达referenceBean.get()方法,返回代理对象,并注入到目标对象的field。

如果抛开SpringBoot如何注入被@DubboReference注解的Bean,可以说referenceBean.get()就是服务引用的入口。

后面的事情就是Dubbo内部要完成的了,大概过程如这样:

springboot与dubbo整合遇到的坑

整合环境:

dubbo 2.6.2

springboot 2.1.5

遇到的问题:服务一直无法注册到zookeeper注册中心

项目结构:

技术图片

使用application.properties文件:

技术图片

配置都没问题,启动的时候也没有明显的错误;

然后就去百度看到大部分都是这种配置,之后在一篇博客中看到,需要在主启动类上加@EnableDubbo注解,试了一下加上之后就可以解决这个问题,希望可以帮到你。

 

 

 

以上是关于Dubbo: 在springboot中的启动过程的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper not connected

Spring Dubbo 开发笔记

Dubbo在开发中的一些常用配置

SpringBoot+Dubbo+Zookeeper Demo测试

Dubbo学习 —— SpringBoot 整合Dubbo

Dubbo学习 —— SpringBoot 整合Dubbo