Dubbo2.7.5 服务启动太慢的问题

文章讨论了如何解决Dubbo项目因过多提供者导致启动缓慢的问题,提出了两种方案:统一管理提供者和使用Spring懒加载。第一种方式效果不明显,第二种方式虽然能显著提升启动速度,但不建议在生产环境使用。

前言

目前我们的后台管理服务,因为引入的提供者太多,导致项目启动太慢,打印了很多The configBean[type:ReferenceBean] has been built.的日志,在启动过程中,Dubbo需要去初始化提供者同时需要和zookeeper建立连接,在开发和测试环境中启动速度太慢,导致开发人员每次重启需要等待很久,所以需要迫切的解决这个问题,目前有2种方案来解决这个问题,下面分别对这2种方案进行测试。

Dubbo创建提供者的日志

在这里插入图片描述

第一种方案

目前我们在很多的service中都引入了很多相同的提供者,考虑把所有的提供者在一个位置统一管理,这样项目中所有使用这个提供者的位置都引用同一个引用。

统一管理提供者的BaseService
在这里插入图片描述
使用BaseService的位置
在这里插入图片描述

经过测试,速度提升不高,由此判断Dubbo在初始化提供者的时候会做判断,如果该提供者已经初始化,不再进行初始化,所以在一个项目中不同的位置引用同一个提供者,不会造成重复初始化。

第二种方案

通过Spring懒加载的形式,因为我们的Dubbo版本比较低,所以并没有Dubbo相关的懒加载的配置例如:lazyInit,所以计划通过Spring的功能来实现。

配置如下

import com.ctrip.framework.apollo.build.ApolloInjector;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.util.ConfigUtil;
import lombok.SneakyThrows;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.annotation.Configuration;

import static com.ctrip.framework.apollo.core.enums.Env.*;

/**
 * @author lwh
 * @date 2023/12/22
 * @description 提升启动速度
 **/
@Configuration
public class LazyInitBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @SneakyThrows
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
        Env apolloEnv = ApolloInjector.getInstance(ConfigUtil.class).getApolloEnv();
        if (apolloEnv == DEV || apolloEnv == FAT || apolloEnv == UAT) {
            for (String beanDefinitionName : beanFactory.getBeanDefinitionNames()) {
                beanFactory.getBeanDefinition(beanDefinitionName).setLazyInit(true);
            }
        }
    }
}

通过在启动的过程中,修改所有Bean的元数据信息,给所有的Bean设置lazyInit属性,当然你也可以通过一些手段和配置,只给你想要的Bean进行懒加载,经过测试启动速度提升较明显,不建议生产环境使用这种方式,因为会影响性能,第一次调用会耗时。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术武器库

一句真诚的谢谢,胜过千言万语

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值