老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

SpringColudEureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

本篇文章為大家展示了SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)與策劃設(shè)計,石家莊網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:石家莊等地區(qū)。石家莊做網(wǎng)站價格咨詢:13518219792

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

一、Eureka簡介

本文中所有代碼都會上傳到git上,請放心瀏覽項目git地址:https://github.com/839022478/Spring-Cloud

在傳統(tǒng)應(yīng)用中,組件之間的調(diào)用,通過有規(guī)范的約束的接口來實現(xiàn),從而實現(xiàn)不同模塊間良好的協(xié)作。但是被拆分成微服務(wù)后,每個微服務(wù)實例的網(wǎng)絡(luò)地址都可能動態(tài)變化,數(shù)量也會變化,使得原來硬編碼的地址失去了作用。需要一個中心化的組件來進(jìn)行服務(wù)的登記和管理,為了解決上面的問題,于是出現(xiàn)了服務(wù)治理,就是管理所有的服務(wù)信息和狀態(tài),也就是我們所說的注冊中心

1.1 注冊中心

  • 比如我們?nèi)プ龌疖嚮蛘咂嚕枰ベI票乘車,只看我們有沒有票(有沒有服務(wù)),有就去買票(獲取注冊列表),然后乘車(調(diào)用),不用關(guān)心到底有多少車在運(yùn)行

流程圖:

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

使用注冊中心,我們不需要關(guān)心有多少提供方,只管去調(diào)用就可以了,那么注冊中心有哪些呢?

注冊中心:Eureka,Nacos,Consul,Zookeeper

本文中講解的是比較火熱的Spring  Cloud微服務(wù)下的Eureka,Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,是一個RESTful風(fēng)格的服務(wù),是一個用于服務(wù)發(fā)現(xiàn)和注冊的基礎(chǔ)組件,是搭建Spring  Cloud微服務(wù)的前提之一,它屏蔽了Server和client的交互細(xì)節(jié),使得開發(fā)者將精力放到業(yè)務(wù)上。

服務(wù)注冊與發(fā)現(xiàn)主要包括兩個部分:服務(wù)端(EurekaServer)和客戶端(EurekaClient)

服務(wù)端(Eureka Server):  一個公共服務(wù),為Client提供服務(wù)注冊和發(fā)現(xiàn)的功能,維護(hù)注冊到自身的Client的相關(guān)信息,同時提供接口給Client獲取注冊表中其他服務(wù)的信息,使得動態(tài)變化的Client能夠進(jìn)行服務(wù)間的相互調(diào)用。

客戶端(Eureka Client):  Client將自己的服務(wù)信息通過一定的方式登記到Server上,并在正常范圍內(nèi)維護(hù)自己信息一致性,方便其他服務(wù)發(fā)現(xiàn)自己,同時可以通過Server獲取到自己依賴的其他服務(wù)信息,完成服務(wù)調(diào)用,還內(nèi)置了負(fù)載均衡器,用來進(jìn)行基本的負(fù)載均衡

Eureka GIt官網(wǎng):https://github.com/Netflix/Eureka

1.2 服務(wù)注冊與發(fā)現(xiàn)

服務(wù)注冊與發(fā)現(xiàn)關(guān)系圖:

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

1.3 client功能和server功能

1.3.1 client功能

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 注冊:每個微服務(wù)啟動時,將自己的網(wǎng)絡(luò)地址等信息注冊到注冊中心,注冊中心會存儲(內(nèi)存中)這些信息。

  3. 獲取服務(wù)注冊表:服務(wù)消費(fèi)者從注冊中心,查詢服務(wù)提供者的網(wǎng)絡(luò)地址,并使用該地址調(diào)用服務(wù)提供者,為了避免每次都查注冊表信息,所以client會定時去server拉取注冊表信息到緩存到client本地。

  4. 心跳:各個微服務(wù)與注冊中心通過某種機(jī)制(心跳)通信,若注冊中心長時間和服務(wù)間沒有通信,就會注銷該實例。

  5. 調(diào)用:實際的服務(wù)調(diào)用,通過注冊表,解析服務(wù)名和具體地址的對應(yīng)關(guān)系,找到具體服務(wù)的地址,進(jìn)行實際調(diào)用。

1.3.2 server注冊中心功能

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 服務(wù)注冊表:記錄各個微服務(wù)信息,例如服務(wù)名稱,ip,端口等。注冊表提供 查詢API(查詢可用的微服務(wù)實例)和管理API(用于服務(wù)的注冊和注銷)。

  3. 服務(wù)注冊與發(fā)現(xiàn):注冊:將微服務(wù)信息注冊到注冊中心。發(fā)現(xiàn):查詢可用微服務(wù)列表及其網(wǎng)絡(luò)地址。

  4. 服務(wù)檢查:定時檢測已注冊的服務(wù),如發(fā)現(xiàn)某實例長時間無法訪問,就從注冊表中移除。

二、Eureka單節(jié)點(diǎn)搭建

2.1 pom.xml

在有的教程中,會引入 spring-boot-starter-web,這個依賴其實不用,因為  spring-cloud-starter-netflix-eureka-server的依賴已經(jīng)包含了它,在pom依賴進(jìn)去,就可以了

   org.springframework.cloud   spring-cloud-starter-netflix-eureka-server 

2.2 application.yml

server:   port: 8500 eureka:   client:     #是否將自己注冊到Eureka Server,默認(rèn)為true,由于當(dāng)前就是server,故而設(shè)置成false,表明該服務(wù)不會向eureka注冊自己的信息     register-with-eureka: false     #是否從eureka server獲取注冊信息,由于單節(jié)點(diǎn),不需要同步其他節(jié)點(diǎn)數(shù)據(jù),用false     fetch-registry: false     #設(shè)置服務(wù)注冊中心的URL,用于client和server端交流     service-url:       defaultZone: http://localhost:8080/eureka/

2.3 服務(wù)端啟動類

啟動類上添加此注解標(biāo)識該服務(wù)為配置中心@EnableEurekaServer

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;  @EnableEurekaServer @SpringBootApplication public class EurekaServerApplication {      public static void main(String[] args) {         SpringApplication.run(EurekaServerApplication.class, args);     } }

2.4 啟動

我們啟動 EurekaDemoApplication,然后在瀏覽器中輸入地址 http://localhost:8500/,就可以啟動我們的 Eureka  了,我們來看下效果,出現(xiàn)了這個畫面,就說明我們已經(jīng)成功啟動~,只是此時我們的服務(wù)中是還沒有客戶端進(jìn)行注冊

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

三、服務(wù)注冊

注意:在客戶端pom里面我們需要加上 spring-boot-starter-web,否則服務(wù)是無法正常啟動的

3.1 pom.xml

      org.springframework.boot      spring-boot-starter-web          org.springframework.cloud      spring-cloud-starter-netflix-eureka-client  

3.2 application.yml

#注冊中心 eureka:   client:     #設(shè)置服務(wù)注冊中心的URL     service-url:       defaultZone: http://localhost:8500/eureka/   #服務(wù)名   instance:     appname: mxn

3.3 客戶端啟動類

在客戶端啟動類中我們需要加上 @EnableDiscoveryClient

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  @EnableDiscoveryClient @SpringBootApplication public class EurekaClientApplication {      public static void main(String[] args) {         SpringApplication.run(EurekaClientApplication.class, args);     } }

3.4 查看效果

工程啟動后,刷新 http://localhost:8500/頁面,我們可以發(fā)現(xiàn)服務(wù)注冊成功了

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

并且我們可以在idea日志打印中看到

DiscoveryClient_MXN/DESKTOP-5BQ3UK8-registration status:204

說明就是注冊成功了 Eureka Server與Eureka Client之間的聯(lián)系主要通過心跳的方式實現(xiàn)。心跳(Heartbeat)即Eureka  Client定時向Eureka Server匯報本服務(wù)實例當(dāng)前的狀態(tài),維護(hù)本服務(wù)實例在注冊表中租約的有效性。

Eureka Client將定時從Eureka Server中拉取注冊表中的信息,并將這些信息緩存到本地,用于服務(wù)發(fā)現(xiàn)

四、Eureka 端點(diǎn)

官網(wǎng)地址:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations

Eureka服務(wù)器還提供了一個端點(diǎn) (eureka/apps/{applicaitonName})可以查看所注冊的服務(wù)詳細(xì)信息  。applicaitonName就是微服務(wù)的名稱,比如這里我們訪問 http://localhost:8500/eureka/apps/mxn

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

五、Eureka 原理

5.1 本質(zhì)

存儲了每個客戶端的注冊信息。EurekaClient從EurekaServer同步獲取服務(wù)注冊列表。通過一定的規(guī)則選擇一個服務(wù)進(jìn)行調(diào)用

5.2 Eureka架構(gòu)圖

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析
  • 服務(wù)提供者: 是一個eureka client,向Eureka Server注冊和更新自己的信息,同時能從Eureka  Server注冊表中獲取到其他服務(wù)的信息。

  • 服務(wù)注冊中心: 提供服務(wù)注冊和發(fā)現(xiàn)的功能。每個Eureka Cient向Eureka Server注冊自己的信息,也可以通過Eureka  Server獲取到其他服務(wù)的信息達(dá)到發(fā)現(xiàn)和調(diào)用其他服務(wù)的目的。

  • 服務(wù)消費(fèi)者: 是一個eureka client,通過Eureka  Server獲取注冊到其上其他服務(wù)的信息,從而根據(jù)信息找到所需的服務(wù)發(fā)起遠(yuǎn)程調(diào)用。

  • 同步復(fù)制: Eureka Server之間注冊表信息的同步復(fù)制,使Eureka Server集群中不同注冊表中服務(wù)實例信息保持一致。

  • 遠(yuǎn)程調(diào)用: 服務(wù)客戶端之間的遠(yuǎn)程調(diào)用。

  • 注冊: Client端向Server端注冊自身的元數(shù)據(jù)以供服務(wù)發(fā)現(xiàn)。

  • 續(xù)約:  通過發(fā)送心跳到Server以維持和更新注冊表中服務(wù)實例元數(shù)據(jù)的有效性。當(dāng)在一定時長內(nèi),Server沒有收到Client的心跳信息,將默認(rèn)服務(wù)下線,會把服務(wù)實例的信息從注冊表中刪除。

  • 下線: Client在關(guān)閉時主動向Server注銷服務(wù)實例元數(shù)據(jù),這時Client的服務(wù)實例數(shù)據(jù)將從Server的注冊表中刪除。

  • 獲取注冊表: Client向Server請求注冊表信息,用于服務(wù)發(fā)現(xiàn),從而發(fā)起服務(wù)間遠(yuǎn)程調(diào)用。

5.3 Eureka自我保護(hù)

有時候我們會看到這樣的提示信息:

EMERGENCY!EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

這是因為默認(rèn)情況下,Eureka  Server在一定時間內(nèi),沒有接收到某個微服務(wù)心跳,會將某個微服務(wù)注銷(90S)。但是當(dāng)網(wǎng)絡(luò)故障時,微服務(wù)與Server之間無法正常通信,上述行為就非常危險,因為微服務(wù)正常,不應(yīng)該注銷,它的指導(dǎo)思想就是  寧可保留健康的和不健康的,也不盲目注銷任何健康的服務(wù)我們也可以通過命令去關(guān)閉自我保護(hù)的功能:

eureka:   server:      enable-self-preservation: false

那么自我保護(hù)是如何觸發(fā)的呢?

自我保護(hù)機(jī)制的觸發(fā)條件是: 當(dāng)每分鐘心跳次數(shù)( renewsLastMin) 小于 numberOfRenewsPerMinThreshold時, 并且開啟自動保護(hù)模式開關(guān)( eureka.server.enable-self-preservation=true) 時 觸發(fā)自我保護(hù)機(jī)制,不再自動過期租約 上面我們所有的小于 numberOfRenewsPerMinThreshold,到底是怎么計算的呢, 我們在eureka源碼中可以得知: numberOfRenewsPerMinThreshold = expectedNumberOfRenewsPerMin * 續(xù)租百分比(默認(rèn)為0.85) expectedNumberOfRenewsPerMin  = 當(dāng)前注冊的應(yīng)用實例數(shù) x 2 當(dāng)前注冊的應(yīng)用實例數(shù) x 2 是因為,在默認(rèn)情況下,注冊的應(yīng)用實例每半分鐘續(xù)租一次,那么一分鐘心跳兩次,因此 x 2

例如:我們有10個服務(wù),期望每分鐘續(xù)約數(shù):10 * 2=20,期望閾值:20*0.85=17,當(dāng)少于17時,就會觸發(fā)自我保護(hù)機(jī)制

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

5.4 健康檢查

由于server和client通過心跳保持 服務(wù)狀態(tài),而只有狀態(tài)為UP的服務(wù)才能被訪問。看eureka界面中的status。

SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析

比如心跳一直正常,服務(wù)一直UP,但是此服務(wù)DB(數(shù)據(jù)庫)連不上了,無法正常提供服務(wù)。

此時,我們需要將  微服務(wù)的健康狀態(tài)也同步到server。只需要啟動eureka的健康檢查就行。這樣微服務(wù)就會將自己的健康狀態(tài)同步到eureka。配置如下即可。

在client端配置:將自己的健康狀態(tài)傳播到server。

eureka:   client:     healthcheck:       enabled: true

5.5 Eureka監(jiān)聽事件

import com.netflix.appinfo.InstanceInfo; import org.springframework.cloud.netflix.eureka.server.event.*; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component;  import java.time.LocalDateTime;  @Component public class CustomEvent {      @EventListener     public void listen(EurekaInstanceCanceledEvent event ) {         System.out.println(LocalDateTime.now()+"服務(wù)下線事件:"+event.getAppName()+"---"+event.getServerId()); //發(fā)釘釘     }      @EventListener     public void listen(EurekaInstanceRegisteredEvent event) {         InstanceInfo instanceInfo = event.getInstanceInfo();         System.out.println(LocalDateTime.now()+"服務(wù)上線事件:"+instanceInfo.getAppName()+"---"+instanceInfo.getInstanceId());     }      @EventListener     public void listen(EurekaInstanceRenewedEvent event) {         System.out.println(LocalDateTime.now()+"服務(wù)續(xù)約/心跳上報事件:"+event.getAppName()+"---"+event.getServerId());      }      @EventListener     public void listen(EurekaRegistryAvailableEvent event) {         System.out.println(LocalDateTime.now()+"注冊中心可用事件");     }      @EventListener     public void listen(EurekaServerStartedEvent event) {         System.out.println(LocalDateTime.now()+"注冊中心啟動事件");      } }

5.6 Renew: 服務(wù)續(xù)約

Eureka Client 會每隔 30 秒發(fā)送一次心跳來續(xù)約。通過續(xù)約來告知 Eureka Server 該 Eureka Client  運(yùn)行正常,沒有出現(xiàn)問題。默認(rèn)情況下,如果 Eureka Server 在 90 秒內(nèi)沒有收到 Eureka Client 的續(xù)約,Server  端會將實例從其注冊表中刪除,此時間可配置,一般情況不建議更改。

5.6 服務(wù)剔除

如果Eureka  Client在注冊后,既沒有續(xù)約,也沒有下線(服務(wù)崩潰或者網(wǎng)絡(luò)異常等原因),那么服務(wù)的狀態(tài)就處于不可知的狀態(tài),不能保證能夠從該服務(wù)實例中獲取到回饋,所以需要服務(wù)剔除此方法定時清理這些不穩(wěn)定的服務(wù),該方法會批量將注冊表中所有過期租約剔除,剔除是定時任務(wù),默認(rèn)60秒執(zhí)行一次。延時60秒,間隔60秒

剔除的限制:1.自我保護(hù)期間不清除。2.分批次清除。

六、Eureka缺陷

由于集群間的同步復(fù)制是通過HTTP的方式進(jìn)行,基于網(wǎng)絡(luò)的不可靠性,集群中的Eureka  Server間的注冊表信息難免存在不同步的時間節(jié)點(diǎn),不滿足CAP中的C(數(shù)據(jù)一致性)

七、總結(jié)

中間我們講解了eureka的節(jié)點(diǎn)搭建,以及原理,對于現(xiàn)在很火熱的微服務(wù),我們對Eureka是非常有必要進(jìn)行了解的。

上述內(nèi)容就是SpringColud Eureka服務(wù)注冊與發(fā)現(xiàn)的示例分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


標(biāo)題名稱:SpringColudEureka服務(wù)注冊與發(fā)現(xiàn)的示例分析
標(biāo)題路徑:http://www.xueling.net.cn/article/joohji.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 新版天堂资源中文8在线 | 亚洲VA欧美va国产va综合 | 精品人妻av区乱码 | 野花日本大全免费观看中文版 | 久久免费看少妇高潮特黄WWW | 999免费视频 | 在线播放免费人成视频网站 | 国产亚洲综合一区二区 | 人妻被粗大猛进猛出国产 | 97夜夜模夜夜爽夜夜喊 | 啄木鸟系列在线 | 国产人成高清在线视频99最全资源 | 亚洲网址在线观看 | 日本成本人片视频免费 | 特级片日本| 99爱色| 日韩中文字幕网址 | chinese性内射高清5 | 公天天吃我奶躁我的比视频 | 久久一区欧美 | 三级全黄女人高潮 | 超碰97国产精品人人cao | 四川少妇BBBB槡BBBB槡 | 英雄使命免费观看在线播放高清 | 久久久久久久久久久久久久久伊免 | 亚洲中文字幕无码中文 | 亚洲最新视频 | 韩国av一区二区三区在线观看 | 91在线91拍拍在线91 | 久久久久久久亚洲国产精品87 | 大胆日本无码一区二区 | 免费a级观看 | 午夜免费视频 | 最新免费视频 | 亚州日本乱码一区二区三区 | 日日碰夜夜操 | 日日碰夜夜操 | 国产hsck在线亚洲 | 97超碰在线视| 亚洲欧美日韩国产一区二区 | 国产日本三级 |