SpringBoot 3整合Dubbo 3的生命周期事件监听实践

【说明】以下内容是基于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似乎在修改生命周期的很多逻辑,很多以前的事件和接口都被标记为弃用,目前文中这个接口和逻辑是否持续有效还需看后续的版本演进情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值