成都网站建设设计

将想法与焦点和您一起共享

SpringCloudEureka如何配置多网卡-创新互联

这篇文章将为大家详细讲解有关SpringCloud Eureka如何配置多网卡,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

鄂伦春ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

如果没有针对多网卡做特别的配置的话,上面看到的192.168.239.1:8080和其链接的URL地址多半不是一个字符串;

我们在配置Eureka Client的时候想要实现的效果是:上面显示192.168.239.1:8080的地方,显示IP地址和端口号,其URL地址的host和port与这里显示的IP地址和端口号一致。同时在多网卡的情况下,我们可以任意选择Spring Cloud App想要使用的网卡。

Spring Cloud 网卡选择一文中,给出了一个多网卡配置的解决方案:

spring.cloud.inetutils.preferred-networks: 192.168.239.
eureka.instance.prefer-ip-address:true

通过设置这两个属性,URL地址的host的值就是我们想要的IP地址了。 
通过查看spring-cloud-netflix-eureka-server包下面的status.ftl文件,发现显示的文本是instance的id。

<#list instanceInfo.instances as instance>
 <#if instance.isHref>
  ${instance.id}
 <#else>
  ${instance.id}
 <#if instance_has_next>,


所以我们只要给instance-id赋值为ip:port就行了:

eureka.instance.instance-id:${spring.cloud.client.ipAddress}:${server.port}
1
spring.cloud.client.ipAddress这个是怎么来的呢?看下HostInfoEnvironmentPostProcessor这个类,这个类是EnvironmentPostProcessor接口的实现:

@Override www.1b23.com
  public void postProcessEnvironment(ConfigurableEnvironment environment,
      SpringApplication application) {
    InetUtils.HostInfo hostInfo = getFirstNonLoopbackHostInfo(environment);
    LinkedHashMap map = new LinkedHashMap<>();
    map.put("spring.cloud.client.hostname", hostInfo.getHostname());
    map.put("spring.cloud.client.ipAddress", hostInfo.getIpAddress());
    MapPropertySource propertySource = new MapPropertySource(
        "springCloudClientHostInfo", map);
    environment.getPropertySources().addLast(propertySource);
  }

这时候问题来了,如果这么设置,会发现显示的内容和其链接地址不一样,通过调成程序发现,显示的时候的host和port和连接地址里的host和port虽然都是通过InetUtils获取的,但是执行的时间点不一样,执行的时候的上下文信息不一样。

首先HostInfoEnvironmentPostProcessor的执行时间点可以参看Spring Boot # EnvironmentPostProcessor,虽然我们配置了spring.cloud.inetutils.preferred-networks: 192.168.239.,但是此时这个application.xml文件的内容还没被加载,HostInfoEnvironmentPostProcessor在执行的时候,上下文里就没有这个配置,所以在执行:

InetUtils.HostInfo hostInfo = getFirstNonLoopbackHostInfo(environment);
1
时候,environment中没有spring.cloud.inetutils.preferred-networks: 192.168.239.这个配置。

EurekaClientAutoConfiguration中的eurekaInstanceConfigBean方法会构造并返回一个EurekaInstanceConfigBean,EurekaInstanceConfigBean的构造方法如下:

public EurekaInstanceConfigBean(InetUtils inetUtils) {
    this.inetUtils = inetUtils;
    this.hostInfo = this.inetUtils.findFirstNonLoopbackHostInfo();
    this.ipAddress = this.hostInfo.getIpAddress();
    this.hostname = this.hostInfo.getHostname();
  }

在这个时间点,application.yml中的配置已经加载,spring boot的配置文件在容器创建之前就全加载完了,具体参看Spring Boot # EnvironmentPostProcessor,spring.cloud.inetutils.preferred-networks: 192.168.239.的信息已经有了,所以此配置就会生效,从而选择出可能跟之前不一样的IP地址。

结论
eureka设置
eureka.instance.prefer-ip-address: true
eureka.instance.instance-id: ${spring.cloud.client.ipAddress}:${server.port}

spring.cloud.inetutils.preferred-networks设置
将spring.cloud.inetutils.preferred-networks的配置从application.yml文件移到外部,jar命令-Dspring.cloud.inetutils.preferred-networks: 192.168.239.覆盖或者设置在系统的环境变量里。用dockerfile或者docker compose就更方便了。

关于“SpringCloud Eureka如何配置多网卡”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:SpringCloudEureka如何配置多网卡-创新互联
网站链接:http://chengdu.cdxwcx.cn/article/dohghs.html