解决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只会执行一次
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

°Fuhb

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值