中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud Eureka如何配置多網卡

發布時間:2021-11-23 14:03:04 來源:億速云 閱讀:306 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關SpringCloud Eureka如何配置多網卡,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

如果沒有針對多網卡做特別的配置的話,上面看到的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>
    <a href="${instance.url}" target="_blank">${instance.id}</a>
  <#else>
    ${instance.id}
  </#if><#if instance_has_next>,</#if>
</#list>

所以我們只要給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<String, Object> 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如何配置多網卡”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜黄县| 海原县| 馆陶县| 靖西县| 岳西县| 云梦县| 新田县| 祁阳县| 全南县| 霍林郭勒市| 临洮县| 五指山市| 黄大仙区| 聂拉木县| 宣汉县| 邵武市| 华阴市| 舟山市| 新源县| 金门县| 盐津县| 澄城县| 凤山市| 南陵县| 临沧市| 永寿县| 格尔木市| 富裕县| 佳木斯市| 玉环县| 和平区| 彭水| 那曲县| 聂拉木县| 西畴县| 齐河县| 广丰县| 科尔| 山丹县| 仙游县| 西昌市|