Eureka
目的
通過這個服務(wù)來看eureka注冊中心的效果。
復(fù)習(xí)Spring Boot撞鹉。
減少了大量配置∮敝叮快速開發(fā)鸟雏。
用Starter集成一個新框架。比如redis览祖,web等孝鹊。添加依賴,加配置文件展蒂。
嵌入式服務(wù)器又活,令開發(fā)和部署變的方便。
Spring Boot介紹:
https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/
代碼步驟
- pom.xml
- application.yml
- java代碼
看代碼锰悼。
服務(wù)注冊與發(fā)現(xiàn)
Eureka 單節(jié)點搭建
-
pom.xml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> 有的教程中還引入spring-boot-starter-web柳骄,其實不用。因為上面的依賴已經(jīng)包含了它松捉。在pom中點此依賴進去夹界,一共點4次spring-cloud-netflix-eureka-server馆里,發(fā)現(xiàn)web的依賴隘世。
-
application.yml
eureka: client: #是否將自己注冊到Eureka Server,默認(rèn)為true,由于當(dāng)前就是server鸠踪,故而設(shè)置成false丙者,表明該服務(wù)不會向eureka注冊自己的信息 register-with-eureka: false #是否從eureka server獲取注冊信息,由于單節(jié)點营密,不需要同步其他節(jié)點數(shù)據(jù)械媒,用false fetch-registry: false #設(shè)置服務(wù)注冊中心的URL,用于client和server端交流 service-url: defaultZone: http://localhost:7900/eureka/
-
application.properties
#是否將自己注冊到Eureka Server,默認(rèn)為true,由于當(dāng)前就是server纷捞,故而設(shè)置成false痢虹,表明該服務(wù)不會向eureka注冊自己的信息 eureka.client.register-with-eureka=false #是否從eureka server獲取注冊信息,由于單節(jié)點主儡,不需要同步其他節(jié)點數(shù)據(jù)奖唯,用false eureka.client.fetch-registry=false #設(shè)置服務(wù)注冊中心的URL,用于client和server端交流 eureka.client.service-url.defaultZone=http://localhost:7900/eureka/
-
代碼
啟動類上添加此注解標(biāo)識該服務(wù)為配置中心 @EnableEurekaServer
PS:Eureka會暴露一些端點糜值。端點用于Eureka Client注冊自身丰捷,獲取注冊表,發(fā)送心跳寂汇。
簡單看一下eureka server控制臺病往,實例信息區(qū),運行環(huán)境信息區(qū)骄瓣,Eureka Server自身信息區(qū)停巷。
Eureka 介紹
整體介紹
- 背景:在傳統(tǒng)應(yīng)用中,組件之間的調(diào)用榕栏,通過有規(guī)范的約束的接口來實現(xiàn)叠穆,從而實現(xiàn)不同模塊間良好的協(xié)作。但是被拆分成微服務(wù)后臼膏,每個微服務(wù)實例的網(wǎng)絡(luò)地址都可能動態(tài)變化硼被,數(shù)量也會變化,使得原來硬編碼的地址失去了作用渗磅。需要一個中心化的組件來進行服務(wù)的登記和管理嚷硫。
- 概念:實現(xiàn)服務(wù)治理,即管理所有的服務(wù)信息和狀態(tài)始鱼。
注冊中心相當(dāng)于買票乘車仔掸,只看有沒有票(有沒有服務(wù)),有就去買票(獲取注冊列表)医清,然后乘車(調(diào)用)起暮。不必關(guān)心有多少火車在運行。
注冊中心好處:不用關(guān)心有多少提供方会烙。
注冊中心有哪些:Eureka负懦,Nacos,Consul柏腻,Zookeeper等纸厉。
-
服務(wù)注冊與發(fā)現(xiàn)包括兩部分,一個是服務(wù)器端五嫂,另一個是客戶端颗品。
Server是一個公共服務(wù)肯尺,為Client提供服務(wù)注冊和發(fā)現(xiàn)的功能,維護注冊到自身的Client的相關(guān)信息躯枢,同時提供接口給Client獲取注冊表中其他服務(wù)的信息则吟,使得動態(tài)變化的Client能夠進行服務(wù)間的相互調(diào)用。
Client將自己的服務(wù)信息通過一定的方式登記到Server上锄蹂,并在正常范圍內(nèi)維護自己信息一致性逾滥,方便其他服務(wù)發(fā)現(xiàn)自己,同時可以通過Server獲取到自己依賴的其他服務(wù)信息败匹,完成服務(wù)調(diào)用寨昙,還內(nèi)置了負(fù)載均衡器,用來進行基本的負(fù)載均衡掀亩。
我們的Spring Cloud是用Eureka作為服務(wù)注冊中心舔哪。
Eureka:是一個RESTful風(fēng)格的服務(wù),是一個用于服務(wù)發(fā)現(xiàn)和注冊的基礎(chǔ)組件槽棍,是搭建Spring Cloud微服務(wù)的前提之一捉蚤,它屏蔽了Server和client的交互細(xì)節(jié),使得開發(fā)者將精力放到業(yè)務(wù)上炼七。
serverA從serverB同步信息缆巧,則serverB是serverA的peer。
上面例子中如果service-url為空豌拙,且register-with-eureka陕悬,fetch-registry為true,則會報錯按傅,Cannot execute request on any known server捉超,因為server同時也是一個client,他會嘗試注冊自己唯绍,所以要有一個注冊中心url去注冊拼岳。
-
Netflix開源的組件。包括server和client兩部分况芒。
https://github.com/Netflix/Eureka
注冊中心和微服務(wù)間的關(guān)系
《服務(wù)注冊與發(fā)現(xiàn)關(guān)系圖》
client功能
- 注冊:每個微服務(wù)啟動時惜纸,將自己的網(wǎng)絡(luò)地址等信息注冊到注冊中心,注冊中心會存儲(內(nèi)存中)這些信息绝骚。
- 獲取服務(wù)注冊表:服務(wù)消費者從注冊中心耐版,查詢服務(wù)提供者的網(wǎng)絡(luò)地址,并使用該地址調(diào)用服務(wù)提供者皮壁,為了避免每次都查注冊表信息寥掐,所以client會定時去server拉取注冊表信息到緩存到client本地禀横。
- 心跳:各個微服務(wù)與注冊中心通過某種機制(心跳)通信,若注冊中心長時間和服務(wù)間沒有通信逛拱,就會注銷該實例。
- 調(diào)用:實際的服務(wù)調(diào)用滴须,通過注冊表舌狗,解析服務(wù)名和具體地址的對應(yīng)關(guān)系,找到具體服務(wù)的地址扔水,進行實際調(diào)用痛侍。
server注冊中心功能
-
服務(wù)注冊表:記錄各個微服務(wù)信息,例如服務(wù)名稱魔市,ip主届,端口等。
注冊表提供 查詢API(查詢可用的微服務(wù)實例)和管理API(用于服務(wù)的注冊和注銷)待德。
服務(wù)注冊與發(fā)現(xiàn):注冊:將微服務(wù)信息注冊到注冊中心君丁。發(fā)現(xiàn):查詢可用微服務(wù)列表及其網(wǎng)絡(luò)地址。
服務(wù)檢查:定時檢測已注冊的服務(wù)将宪,如發(fā)現(xiàn)某實例長時間無法訪問绘闷,就從注冊表中移除。
組件:Eureka , Consul , ZooKeeper较坛,nacos等印蔗。
服務(wù)注冊
例子:api-listen-order
- pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- application.yml
#注冊中心
eureka:
client:
#設(shè)置服務(wù)注冊中心的URL
service-url:
defaultZone: http://root:root@localhost:7900/eureka/
ps:不想注冊,設(shè)置成false即可丑勤,實例演示結(jié)果:注冊中心沒有實例信息华嘹。找控制臺204信息也沒有找到。
spring:
cloud:
service-registry:
auto-registration:
enabled: false
注冊成功:
DiscoveryClient_API-LISTEN-ORDER/api-listen-order:30.136.133.9:port - registration status: 204
后面源碼講手動注冊法竞。
PS:
Eureka Server與Eureka Client之間的聯(lián)系主要通過心跳的方式實現(xiàn)除呵。心跳(Heartbeat)即Eureka Client定時向Eureka Server匯報本服務(wù)實例當(dāng)前的狀態(tài),維護本服務(wù)實例在注冊表中租約的有效性爪喘。
Eureka Client將定時從Eureka Server中拉取注冊表中的信息颜曾,并將這些信息緩存到本地,用于服務(wù)發(fā)現(xiàn)秉剑。
服務(wù)調(diào)用
Eureka高可用
高可用:可以通過運行多個Eureka server實例并相互注冊的方式實現(xiàn)泛豪。Server節(jié)點之間會彼此增量地同步信息,從而確保節(jié)點中數(shù)據(jù)一致侦鹏。
搭建步驟
1.準(zhǔn)備
準(zhǔn)備2個節(jié)點部署eureka诡曙,也可以單機部署
修改本機host文件,綁定一個主機名略水,單機部署時使用ip地址會有問題
2.配置文件
節(jié)點 1:
#是否將自己注冊到其他Eureka Server,默認(rèn)為true 需要
eureka.client.register-with-eureka=true
#是否從eureka server獲取注冊信息价卤, 需要
eureka.client.fetch-registry=true
#設(shè)置服務(wù)注冊中心的URL,用于client和server端交流
#此節(jié)點應(yīng)向其他節(jié)點發(fā)起請求
eureka.client.serviceUrl.defaultZone=http://ek2.com:7902/eureka/
#主機名渊涝,必填
eureka.instance.hostname=ek1.com
management.endpoint.shutdown.enabled=true
#web端口慎璧,服務(wù)是由這個端口處理rest請求的
server.port=7901
節(jié)點 2:
#是否將自己注冊到其他Eureka Server,默認(rèn)為true 需要
eureka.client.register-with-eureka=true
#是否從eureka server獲取注冊信息床嫌, 需要
eureka.client.fetch-registry=true
#設(shè)置服務(wù)注冊中心的URL,用于client和server端交流
#此節(jié)點應(yīng)向其他節(jié)點發(fā)起請求
eureka.client.serviceUrl.defaultZone=http://ek1.com:7902/eureka/
#主機名胸私,必填
eureka.instance.hostname=ek2.com
management.endpoint.shutdown.enabled=true
#web端口厌处,服務(wù)是由這個端口處理rest請求的
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)端點
Spring Boot 2.0 的Actuator只暴露了health和info端點,提供的監(jiān)控信息無法滿足我們的需求
在1.x中有n多可供我們監(jiān)控的節(jié)點岁疼,官方的回答是為了安全….
開啟所有端點
在application.yml中加入如下配置信息
*代表所有節(jié)點都加載
#開啟所有端點
management.endpoints.web.exposure.include=*
所有端點都開啟后的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端點功能
Health
會顯示系統(tǒng)狀態(tài)
{"status":"UP"}
shutdown
用來關(guān)閉節(jié)點
開啟遠(yuǎn)程關(guān)閉功能
management.endpoint.shutdown.enabled=true
使用Post方式請求端點
{
"message": "Shutting down, bye..."
}
autoconfig
獲取應(yīng)用的自動化配置報告
beans
獲取應(yīng)用上下文中創(chuàng)建的所有Bean
configprops
獲取應(yīng)用中配置的屬性信息報告
env
獲取應(yīng)用所有可用的環(huán)境屬性報告
Mappings
獲取應(yīng)用所有Spring Web的控制器映射關(guān)系報告
info
獲取應(yīng)用自定義的信息
metrics
返回應(yīng)用的各類重要度量指標(biāo)信息
Metrics節(jié)點并沒有返回全量信息阔涉,我們可以通過不同的key去加載我們想要的值
metrics/jvm.memory.max
Threaddump
1.x中為dump
返回程序運行中的線程信息