【说明】以下内容是基于SpringBoot 3.2.12和Dubbo 3.3.3版本的分析
Dubbo3在SpringBoot中的集成,其生命周期是由内部的DubboSpringInitializer来进行的,能够通过简单的@EnableDubbo注解来开启,具体代码部分可详见org.apache.dubbo.config.spring包,不过个人认为目前的集成还不够完美,比如生命周期的管理。
在使用@EnableDubbo注解后,你会发现SpringBoot自己定义的很多Event(详见官方文档)便不能被触发,比如ApplicationStartingEvent、ApplicationPreparedEvent等在初始化前半段的一些事件无法通过addListeners、@EventListener或META-INF文件注册等方式获取,根源在于Dubbo旁路实现了的一套自己的初始化逻辑,当然这也是与其他Spring家族系框架相比,个人认为并不是很完美的地方。
官方文档对Dubbo的生命周期阐述十分有限,一篇详细的文章可见于此,在官方代码的org.apache.dubbo.config.spring.context.event包下,尽管很多Event实现了Spring的ApplicationEvent接口,但其实并不都能通过Spring的Listener注册监听,个人试过监听DubboApplicationStateEvent,但无法监听到DeployState中的PENDING等阶段。官方文档对如何通过SPI方式扩展来监听事件着墨不多,仅在这里对一些关键的SPI点进行了罗列,其中org.apache.dubbo.common.deploy.ApplicationDeployListener扩展点位可实现对Dubbo生命周期关键点位的监听。
扩展点位:org.apache.dubbo.common.deploy.ApplicationDeployListener
使用方法:SPI方式(具体方式可参见官方文档或我的前几篇博文,这里就不再赘述了。该点位的具体实现类不需要任何注解即可自动激活)
实践代码:
public class DubboListener implements ApplicationDeployListener {
@Override
public void onInitialize(ApplicationModel scopeModel) {
}
@Override
public void onStarting(ApplicationModel scopeModel) {
}
@Override
public void onStarted(ApplicationModel scopeModel) {
}
@Override
public void onStopping(ApplicationModel scopeModel) {
}
@Override
public void onStopped(ApplicationModel scopeModel) {
}
@Override
public void onFailure(ApplicationModel scopeModel, Throwable cause) {
}
}
其中,这些函数名字对应的触发阶段就类似于SpringBoot相比于Spring新增的Prepared、Starting、Started等事件触发阶段,当然粒度上没有SpringBoot那么细,但也足够使用。
实际应用中,可以自己在对用的触发阶段函数中实现自己的代码逻辑即可。
从目前的代码发布来看,Dubbo似乎在修改生命周期的很多逻辑,很多以前的事件和接口都被标记为弃用,目前文中这个接口和逻辑是否持续有效还需看后续的版本演进情况。
1万+

被折叠的 条评论
为什么被折叠?



