日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud之Eureka的常见问题及配置优化

發(fā)布時間:2024/1/18 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud之Eureka的常见问题及配置优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

SpringCloud之Eureka的常見問題及配置優(yōu)化

  • 1.EurekaServer集群中節(jié)點均出現(xiàn)在unavailable-replicas下
    • 1.問題描述
    • 2.解決方式
    • 3.原因
  • 2. Eureka的Server端的參數(shù)配置優(yōu)化
  • 3.Eureka的Client端的參數(shù)配置優(yōu)化

1.EurekaServer集群中節(jié)點均出現(xiàn)在unavailable-replicas下

1.問題描述

我在啟動了3個EurekaServer服務(wù)后,在dashboard的General Info中發(fā)現(xiàn),集群中的節(jié)點均出現(xiàn)在unavailable-replicas下,沒有出現(xiàn)在available-replicas中,這樣雖然我的集群是可用的,但是總感覺不踏實,最后通過源碼發(fā)現(xiàn),是自己的配置不對。

2.解決方式

那么需要怎么解決呢?通過多次試驗,主要是以下幾個配置:
1.

eureka:client:fetch-registry: trueregister-with-eureka: true
  • eureka.client. service-url.defaultZone中的url要用hostname,要使用域名,DNS解析請自行配置,不能使用localhost或者ip,并且這個hostname要與eureka.instance.hostname的值是一樣的;
  • spring.application.name的值要一樣
    基本上就是以上兩三點。

    3.原因

    我訪問的dashboard的頁面主要是通過EurekaController下的這status的get請求得到的,如下:

    @RequestMapping(method = {RequestMethod.GET} ) public String status(HttpServletRequest request, Map<String, Object> model) {this.populateBase(request, model);this.populateApps(model);StatusInfo statusInfo;try {//獲取集群中peer節(jié)點的狀態(tài)信息statusInfo = (new StatusResource()).getStatusInfo();} catch (Exception var5) {statusInfo = Builder.newBuilder().isHealthy(false).build();}model.put("statusInfo", statusInfo);this.populateInstanceInfo(model, statusInfo);this.filterReplicas(model, statusInfo);return "eureka/status"; }

    下面我就看下getStatusInfo()這個方法:

    @GET public StatusInfo getStatusInfo() {return this.statusUtil.getStatusInfo(); }

    再往下跟,我們看下statusUtil.getStatusInfo()這個方法:

    public StatusInfo getStatusInfo() {Builder builder = Builder.newBuilder();int upReplicasCount = 0;StringBuilder upReplicas = new StringBuilder();StringBuilder downReplicas = new StringBuilder();StringBuilder replicaHostNames = new StringBuilder();Iterator var6 = this.peerEurekaNodes.getPeerEurekaNodes().iterator();while(var6.hasNext()) {PeerEurekaNode node = (PeerEurekaNode)var6.next();if (replicaHostNames.length() > 0) {replicaHostNames.append(", ");}replicaHostNames.append(node.getServiceUrl());//判斷是否能夠加入到available-replicas中if (this.isReplicaAvailable(node.getServiceUrl())) {upReplicas.append(node.getServiceUrl()).append(',');++upReplicasCount;} else {downReplicas.append(node.getServiceUrl()).append(',');}}builder.add("registered-replicas", replicaHostNames.toString());builder.add("available-replicas", upReplicas.toString());builder.add("unavailable-replicas", downReplicas.toString());if (this.peerEurekaNodes.getMinNumberOfAvailablePeers() > -1) {builder.isHealthy(upReplicasCount >= this.peerEurekaNodes.getMinNumberOfAvailablePeers());}builder.withInstanceInfo(this.instanceInfo);return builder.build();}

    下面我們再往下跟,主要看下isReplicaAvailable(node.getServiceUrl())這個判斷的方法:

    private boolean isReplicaAvailable(String url) {try {//從其他節(jié)點中獲取當(dāng)前節(jié)點的注冊信息,即當(dāng)前的服務(wù)端要注冊到其他節(jié)點,如果沒注冊,這里的app就會返回null//而控制能否注冊的參數(shù)就是eureka.client.register-with-eureka//然后就是還要能夠拉取,如果不能及時拉取,就只能等其它節(jié)點向我同步了,會產(chǎn)生延遲或者數(shù)據(jù)不同步(一致)//除此之外,還要注意一點,就是registry.getApplication(this.myAppName, false);這個方法中myAppName,這就 //說集群中的每個server的名字要一樣,即spring.application.name的值要一樣if (app == null) {Application app = this.registry.getApplication(this.myAppName, false);if (app == null) {return false;}Iterator var3 = app.getInstances().iterator();//循環(huán)判斷peerEurekaNodes中的hostname是否與注冊到我這個服務(wù)的節(jié)點的hostname一致while(var3.hasNext()) {InstanceInfo info = (InstanceInfo)var3.next();//這個函數(shù)比較重要,就是判斷hostname是否一致,下面我們看下if (this.peerEurekaNodes.isInstanceURL(url, info)) {return true;}}} catch (Throwable var5) {logger.error("Could not determine if the replica is available ", var5);}return false;}

    下面我們看下isInstanceURL()這個方法:

    public boolean isInstanceURL(String url, InstanceInfo instance) {String hostName = hostFromUrl(url);String myInfoComparator = instance.getHostName();if (this.clientConfig.getTransportConfig().applicationsResolverUseIp()) {myInfoComparator = instance.getIPAddr();}return hostName != null && hostName.equals(myInfoComparator); }

    其實這個方法很簡答, 就是從url中抽取hostname與注冊進(jìn)來的節(jié)點的hostname盡心比較。

    2. Eureka的Server端的參數(shù)配置優(yōu)化

    eureka:client:# 開啟注冊表的拉取fetch-registry: trueregister-with-eureka: trueservice-url:defaultZone: http://eureka-8700:8700/eureka/,http://eureka-8701:8700/eureka/,http://eureka-8702:8702/eureka/server:# 自我保護(hù),看服務(wù)的多少,如果服務(wù)很多,就開啟,服務(wù)較少,就關(guān)閉enable-self-preservation: false# 自我保護(hù)的閾值renewal-percent-threshold: 0.85# 剔除服務(wù)的間隔時間eviction-interval-timer-in-ms: 1000# 關(guān)閉從readOnly讀注冊表use-read-only-response-cache: false# readwrite與readOnly同步的時間間隔response-cache-update-interval-ms: 1000# 從其他peer拉取注冊表重試的次數(shù)(最多拉取的次數(shù))registry-sync-retries: 2

    這樣做的目的主要有兩個:
    1.減少服務(wù)上下線的延遲;
    2.自我保護(hù)的開啟或者關(guān)閉,需要看網(wǎng)絡(luò)和服務(wù)的多少
    3.服務(wù)更新的時候,要先停止服務(wù),再發(fā)送下線請求。因為如果先發(fā)送下線請求,再停止服務(wù)的話,由于服務(wù)有續(xù)約的定時任務(wù),會導(dǎo)致下線之后,服務(wù)又自動續(xù)約了,那就只等到server來進(jìn)行剔除服務(wù)了。這里的服務(wù)指的是注冊到EurekaServer中的服務(wù)。

    3.Eureka的Client端的參數(shù)配置優(yōu)化

    eureka:client:service-url:defaultZone: http://localhost:8700/eureka,http://localhost:8701/eureka,http://localhost:8702/eureka,prefer-same-zone-eureka:## 開啟注冊表的拉取fetch-registry: true## 說明自己是一個客戶端enabled: true## 拉取注冊表的時間間隔registry-fetch-interval-seconds: 5## 開啟想eurekaServer注冊register-with-eureka: trueinstance:## 續(xù)約的時間間隔lease-renewal-interval-in-seconds: 10## 缺少心跳的過期時間lease-expiration-duration-in-seconds: 10

    除此之外,還有一個小技巧,我們在生產(chǎn)中配置eureka.client.service-url.defaultZone的時候,各個client端的配置盡量要隨機一下,即打亂一下defaultZone中url的順序,這是因為在拉取注冊表的時候,默認(rèn)從第一個url開始拉取,拉取不到才從下一個拉取,并且最多只能拉取3個;同時,在注冊的時候,只會注冊到第一個url,不會注冊到下面的url。所以我們打亂了順序以后,就減少了對某一個server的依賴,也降低了對某一個server的請求次數(shù)。

    總結(jié)

    以上是生活随笔為你收集整理的SpringCloud之Eureka的常见问题及配置优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: www色网站| 成人精品亚洲 | 午夜鲁鲁 | 欧美一区二不卡视频 | 17c国产精品一区二区 | 国产成人无码www免费视频播放 | 日本一级淫片免费放 | 国产一级久久 | 久草免费资源站 | 爱爱视频一区 | 日韩在线观看av | 开心激情亚洲 | 丁香婷婷六月 | 日韩中文在线播放 | 99热这里是精品 | 精品少妇一区二区三区免费观 | 超薄肉色丝袜一二三 | hs视频在线观看 | 国产成人一区二区三区视频 | 噼里啪啦免费看 | 婷婷丁香花五月天 | 国产小视频免费观看 | 欧美日韩不卡一区二区三区 | 日本一区二区三区精品视频 | 欧美经典一区 | 揄拍自拍 | 国产色播av在线 | 久久精品2019中文字幕 | aaaa黄色片| 国产在线视频不卡 | 不卡的免费av | 奇米影视四色在线 | 日本免费专区 | 久久久精选 | 中国在线观看片免费 | 国产高清色 | 欧美日韩一区二区视频在线观看 | 一本色道久久综合亚洲 | 波多野结衣一区二区三区在线观看 | 91久久精品美女高潮 | 青青草十七色 | 片黄在线观看 | 大黑人交xxx极品hd | 日日夜夜综合网 | av免费在线观看网站 | 男生插女生视频在线观看 | 亚洲在线网站 | 少妇一级淫片免费播放 | 男人免费网站 | 成人免费看 | 亚洲av无码一区东京热久久 | 久久疯狂做爰流白浆xx | 国产一级影院 | 最近2019中文字幕大全第二页 | 中文av一区二区 | 最新视频 - x88av | 成人午夜激情网 | 国产精品高潮呻吟av | 国产精品扒开腿做爽爽爽a片唱戏 | 中国国语农村大片 | 91精品一区二区三区四区 | 99精品免费 | av黄在线 | 欧美一区二区三区小说 | 一区二区免费在线播放 | www.久久久 | 精品一区二区三区四区五区六区 | 亚洲免费毛片 | 琪琪色在线观看 | 久久久国产精品x99av | 国产精品丝袜视频 | 熟妇人妻精品一区二区三区视频 | 韩毛片| 精品在线观看视频 | 国产美女主播在线 | 欧美日韩一区二区三区免费 | 久久久久久久久久免费视频 | 日本精品网 | 欧美一级爱爱 | 五月天爱爱 | 国产欧美久久久久久 | 国产女主播视频 | 久久久久国产精品夜夜夜夜夜 | 亚洲精品999 | 可以看黄色的网站 | 免费黄色小说视频 | 欧美日韩欧美 | 假日游船法国满天星 | 无码av免费毛片一区二区 | 中文字幕在线观看免费 | 毛片毛片毛片毛片毛片毛片毛片 | 日本aaaa | 国产自在线拍 | 日韩在线不卡一区 | 欧美精品黄 | 超碰中文字幕在线 | 国产suv精品一区二区68 | 欧美做受高潮1 | 亚洲依依|