Eureka注冊(cè)中心

Eureka

目的

通過(guò)這個(gè)服務(wù)來(lái)看eureka注冊(cè)中心的效果。

復(fù)習(xí)Spring Boot。

減少了大量配置。快速開發(fā)。

用Starter集成一個(gè)新框架。比如redis,web等。添加依賴,加配置文件。

嵌入式服務(wù)器,令開發(fā)和部署變的方便。

Spring Boot介紹:
https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/

代碼步驟

  1. pom.xml
  2. application.yml
  3. java代碼

看代碼。

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

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

  1. pom.xml

    <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
    有的教程中還引入spring-boot-starter-web,其實(shí)不用。因?yàn)樯厦娴囊蕾囈呀?jīng)包含了它。在pom中點(diǎn)此依賴進(jìn)去,一共點(diǎn)4次spring-cloud-netflix-eureka-server,發(fā)現(xiàn)web的依賴。
    
    
  2. application.yml

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

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

    啟動(dòng)類上添加此注解標(biāo)識(shí)該服務(wù)為配置中心
    @EnableEurekaServer
    
  2. PS:Eureka會(huì)暴露一些端點(diǎn)。端點(diǎn)用于Eureka Client注冊(cè)自身,獲取注冊(cè)表,發(fā)送心跳。

  3. 簡(jiǎn)單看一下eureka server控制臺(tái),實(shí)例信息區(qū),運(yùn)行環(huán)境信息區(qū),Eureka Server自身信息區(qū)。

Eureka 介紹

整體介紹

  1. 背景:在傳統(tǒng)應(yīng)用中,組件之間的調(diào)用,通過(guò)有規(guī)范的約束的接口來(lái)實(shí)現(xiàn),從而實(shí)現(xiàn)不同模塊間良好的協(xié)作。但是被拆分成微服務(wù)后,每個(gè)微服務(wù)實(shí)例的網(wǎng)絡(luò)地址都可能動(dòng)態(tài)變化,數(shù)量也會(huì)變化,使得原來(lái)硬編碼的地址失去了作用。需要一個(gè)中心化的組件來(lái)進(jìn)行服務(wù)的登記和管理。
  2. 概念:實(shí)現(xiàn)服務(wù)治理,即管理所有的服務(wù)信息和狀態(tài)。
注冊(cè)中心相當(dāng)于買票乘車,只看有沒有票(有沒有服務(wù)),有就去買票(獲取注冊(cè)列表),然后乘車(調(diào)用)。不必關(guān)心有多少火車在運(yùn)行。
  1. 注冊(cè)中心好處:不用關(guān)心有多少提供方。

  2. 注冊(cè)中心有哪些:Eureka,Nacos,Consul,Zookeeper等。

  3. 服務(wù)注冊(cè)與發(fā)現(xiàn)包括兩部分,一個(gè)是服務(wù)器端,另一個(gè)是客戶端。

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

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

  4. 我們的Spring Cloud是用Eureka作為服務(wù)注冊(cè)中心。

  5. Eureka:是一個(gè)RESTful風(fēng)格的服務(wù),是一個(gè)用于服務(wù)發(fā)現(xiàn)和注冊(cè)的基礎(chǔ)組件,是搭建Spring Cloud微服務(wù)的前提之一,它屏蔽了Server和client的交互細(xì)節(jié),使得開發(fā)者將精力放到業(yè)務(wù)上。

  6. serverA從serverB同步信息,則serverB是serverA的peer。

  7. 上面例子中如果service-url為空,且register-with-eureka,fetch-registry為true,則會(huì)報(bào)錯(cuò),Cannot execute request on any known server,因?yàn)閟erver同時(shí)也是一個(gè)client,他會(huì)嘗試注冊(cè)自己,所以要有一個(gè)注冊(cè)中心url去注冊(cè)。

  8. Netflix開源的組件。包括server和client兩部分。

    https://github.com/Netflix/Eureka
    

注冊(cè)中心和微服務(wù)間的關(guān)系

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

client功能

  1. 注冊(cè):每個(gè)微服務(wù)啟動(dòng)時(shí),將自己的網(wǎng)絡(luò)地址等信息注冊(cè)到注冊(cè)中心,注冊(cè)中心會(huì)存儲(chǔ)(內(nèi)存中)這些信息。
  2. 獲取服務(wù)注冊(cè)表:服務(wù)消費(fèi)者從注冊(cè)中心,查詢服務(wù)提供者的網(wǎng)絡(luò)地址,并使用該地址調(diào)用服務(wù)提供者,為了避免每次都查注冊(cè)表信息,所以client會(huì)定時(shí)去server拉取注冊(cè)表信息到緩存到client本地。
  3. 心跳:各個(gè)微服務(wù)與注冊(cè)中心通過(guò)某種機(jī)制(心跳)通信,若注冊(cè)中心長(zhǎng)時(shí)間和服務(wù)間沒有通信,就會(huì)注銷該實(shí)例。
  4. 調(diào)用:實(shí)際的服務(wù)調(diào)用,通過(guò)注冊(cè)表,解析服務(wù)名和具體地址的對(duì)應(yīng)關(guān)系,找到具體服務(wù)的地址,進(jìn)行實(shí)際調(diào)用。

server注冊(cè)中心功能

  1. 服務(wù)注冊(cè)表:記錄各個(gè)微服務(wù)信息,例如服務(wù)名稱,ip,端口等。

    注冊(cè)表提供 查詢API(查詢可用的微服務(wù)實(shí)例)和管理API(用于服務(wù)的注冊(cè)和注銷)。

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

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

組件:Eureka , Consul , ZooKeeper,nacos等。

服務(wù)注冊(cè)

例子:api-listen-order

  1. pom.xml
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
  1. application.yml
#注冊(cè)中心
eureka: 
  client:
    #設(shè)置服務(wù)注冊(cè)中心的URL
    service-url:                      
      defaultZone: http://root:root@localhost:7900/eureka/

ps:不想注冊(cè),設(shè)置成false即可,實(shí)例演示結(jié)果:注冊(cè)中心沒有實(shí)例信息。找控制臺(tái)204信息也沒有找到。

spring: 
  cloud:
    service-registry:
      auto-registration:
        enabled: false

注冊(cè)成功:

DiscoveryClient_API-LISTEN-ORDER/api-listen-order:30.136.133.9:port - registration status: 204

后面源碼講手動(dòng)注冊(cè)。

PS:

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

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

服務(wù)調(diào)用

Eureka高可用

高可用:可以通過(guò)運(yùn)行多個(gè)Eureka server實(shí)例并相互注冊(cè)的方式實(shí)現(xiàn)。Server節(jié)點(diǎn)之間會(huì)彼此增量地同步信息,從而確保節(jié)點(diǎn)中數(shù)據(jù)一致。

搭建步驟

1.準(zhǔn)備

準(zhǔn)備2個(gè)節(jié)點(diǎn)部署eureka,也可以單機(jī)部署

修改本機(jī)host文件,綁定一個(gè)主機(jī)名,單機(jī)部署時(shí)使用ip地址會(huì)有問題

2.配置文件

節(jié)點(diǎn) 1:

#是否將自己注冊(cè)到其他Eureka Server,默認(rèn)為true 需要
eureka.client.register-with-eureka=true
#是否從eureka server獲取注冊(cè)信息, 需要
eureka.client.fetch-registry=true
#設(shè)置服務(wù)注冊(cè)中心的URL,用于client和server端交流
#此節(jié)點(diǎn)應(yīng)向其他節(jié)點(diǎn)發(fā)起請(qǐng)求
eureka.client.serviceUrl.defaultZone=http://ek2.com:7902/eureka/
#主機(jī)名,必填
eureka.instance.hostname=ek1.com
management.endpoint.shutdown.enabled=true
#web端口,服務(wù)是由這個(gè)端口處理rest請(qǐng)求的
server.port=7901

節(jié)點(diǎn) 2:

#是否將自己注冊(cè)到其他Eureka Server,默認(rèn)為true 需要
eureka.client.register-with-eureka=true
#是否從eureka server獲取注冊(cè)信息, 需要
eureka.client.fetch-registry=true
#設(shè)置服務(wù)注冊(cè)中心的URL,用于client和server端交流
#此節(jié)點(diǎn)應(yīng)向其他節(jié)點(diǎn)發(fā)起請(qǐng)求
eureka.client.serviceUrl.defaultZone=http://ek1.com:7902/eureka/
#主機(jī)名,必填
eureka.instance.hostname=ek2.com
management.endpoint.shutdown.enabled=true
#web端口,服務(wù)是由這個(gè)端口處理rest請(qǐng)求的
server.port=7902

使用Spring Boot2.x Actuator監(jiān)控應(yīng)用

開啟監(jiān)控

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

默認(rèn)端點(diǎn)

Spring Boot 2.0 的Actuator只暴露了health和info端點(diǎn),提供的監(jiān)控信息無(wú)法滿足我們的需求

在1.x中有n多可供我們監(jiān)控的節(jié)點(diǎn),官方的回答是為了安全….

開啟所有端點(diǎn)

在application.yml中加入如下配置信息

*代表所有節(jié)點(diǎn)都加載

#開啟所有端點(diǎn)
management.endpoints.web.exposure.include=*

所有端點(diǎn)都開啟后的api列表

{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},"archaius":{"href":"http://localhost:8080/actuator/archaius","templated":false},"beans":{"href":"http://localhost:8080/actuator/beans","templated":false},"caches-cache":{"href":"http://localhost:8080/actuator/caches/{cache}","templated":true},"caches":{"href":"http://localhost:8080/actuator/caches","templated":false},"health":{"href":"http://localhost:8080/actuator/health","templated":false},"health-path":{"href":"http://localhost:8080/actuator/health/{*path}","templated":true},"info":{"href":"http://localhost:8080/actuator/info","templated":false},"conditions":{"href":"http://localhost:8080/actuator/conditions","templated":false},"configprops":{"href":"http://localhost:8080/actuator/configprops","templated":false},"env":{"href":"http://localhost:8080/actuator/env","templated":false},"env-toMatch":{"href":"http://localhost:8080/actuator/env/{toMatch}","templated":true},"loggers":{"href":"http://localhost:8080/actuator/loggers","templated":false},"loggers-name":{"href":"http://localhost:8080/actuator/loggers/{name}","templated":true},"heapdump":{"href":"http://localhost:8080/actuator/heapdump","templated":false},"threaddump":{"href":"http://localhost:8080/actuator/threaddump","templated":false},"metrics":{"href":"http://localhost:8080/actuator/metrics","templated":false},"metrics-requiredMetricName":{"href":"http://localhost:8080/actuator/metrics/{requiredMetricName}","templated":true},"scheduledtasks":{"href":"http://localhost:8080/actuator/scheduledtasks","templated":false},"mappings":{"href":"http://localhost:8080/actuator/mappings","templated":false},"refresh":{"href":"http://localhost:8080/actuator/refresh","templated":false},"features":{"href":"http://localhost:8080/actuator/features","templated":false},"service-registry":{"href":"http://localhost:8080/actuator/service-registry","templated":false}}}

api端點(diǎn)功能

Health

會(huì)顯示系統(tǒng)狀態(tài)

{"status":"UP"}

shutdown

用來(lái)關(guān)閉節(jié)點(diǎn)

開啟遠(yuǎn)程關(guān)閉功能

management.endpoint.shutdown.enabled=true

使用Post方式請(qǐng)求端點(diǎn)

{

"message": "Shutting down, bye..."

}

autoconfig

獲取應(yīng)用的自動(dòng)化配置報(bào)告
beans

獲取應(yīng)用上下文中創(chuàng)建的所有Bean

configprops

獲取應(yīng)用中配置的屬性信息報(bào)告

env

獲取應(yīng)用所有可用的環(huán)境屬性報(bào)告

Mappings

獲取應(yīng)用所有Spring Web的控制器映射關(guān)系報(bào)告

info

獲取應(yīng)用自定義的信息

metrics

返回應(yīng)用的各類重要度量指標(biāo)信息

Metrics節(jié)點(diǎn)并沒有返回全量信息,我們可以通過(guò)不同的key去加載我們想要的值

metrics/jvm.memory.max

Threaddump

1.x中為dump

返回程序運(yùn)行中的線程信息

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,801評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,223評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,442評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,800評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,996評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,233評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,702評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374