栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

解决alibaba-dubbo调用findFirstNonLoopbackHostInfo导致启动慢

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决alibaba-dubbo调用findFirstNonLoopbackHostInfo导致启动慢

dubbo provider在暴露服务时,会执行 DubboServicemetadataRepository.exportURL ,在这里会调用 inetUtils.findFirstNonLoopbackHostInfo() ,本人开发环境下(win10+jdk8)执行这句代码需要3秒,每暴露一个服务都会调用一次,导致整个启动过程很久。

	public void exportURL(URL url) {
		URL actualURL = url;
		InetUtils.HostInfo hostInfo = inetUtils.findFirstNonLoopbackHostInfo();
		String ipAddress = hostInfo.getIpAddress();
		// To use InetUtils to set IP if they are different
		// issue :
		// https://github.com/spring-cloud-incubator/spring-cloud-alibaba/issues/589
		if (!Objects.equals(url.getHost(), ipAddress)) {
			actualURL = url.setHost(ipAddress);
		}
		this.allExportedURLs.add(actualURL.getServiceKey(), actualURL);
	}

这里的 inetUtils 是从Spring容器获取的,因此我们可以实现自己的Bean将其替代掉。

  • 先创建个自己的 InetUtils:
public class MyInetUtils extends InetUtils {

    private InetAddress inetAddress = null;

    public MyInetUtils(final InetUtilsProperties properties){
        super(properties);
    }

    @Override
    public InetAddress findFirstNonLoopbackAddress() {
    	//就是这里,把address缓存起来,避免重复执行导致速度慢
        if (inetAddress == null) {
            inetAddress = super.findFirstNonLoopbackAddress();
        }
        return inetAddress;
    }
}
  • 替代Bean:
@Configuration
public class MyConf {

    @Bean
    @Primary
    public InetUtils inetUtils(@Autowired InetUtilsProperties properties){
        return new MyInetUtils(properties);
    }
}
  • 重新运行即可,会发现spring-cloud-commons自带的findFirstNonLoopbackAddress只会执行一次
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684943.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号