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

解决alibaba-dubbo调用findFirstNonLoopbackHostInfo导致启动慢,第1张

解决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只会执行一次

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5685492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存