javascript
yml eureka defaultzone 只生效第一个_SpringCloud基础教程(三)-Eureka进阶
? ?我的博客:http://www.hao127.com.cn/,歡迎瀏覽博客!
? ?上一章 http://hao127.com.cn/#/view/65當(dāng)中,我們介紹了微服務(wù)組件當(dāng)中的服務(wù)注冊(cè)和發(fā)現(xiàn)組件
Eureka,本章將繼續(xù)探索Eurea在生產(chǎn)環(huán)境中的配置和使用。
前言
?在上一章當(dāng)中,我們初步了解了Eureka的使用,雖然最基本的場(chǎng)景,服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)和消費(fèi)都可以實(shí)現(xiàn)。但是在實(shí)際的企業(yè)應(yīng)用時(shí)候,就會(huì)遇到很多的自定義的配置。特別是在生產(chǎn)環(huán)境。
一、Eureka的健康檢查
?在不添加任何配置的情況下,Eureka注冊(cè)中心和服務(wù)之間是通過(guò)心跳機(jī)制來(lái)監(jiān)測(cè)的,如果心跳正常,那么代表服務(wù)是可以用的。但是實(shí)際上不是這樣。我們開(kāi)發(fā)的微服務(wù)組件,大多數(shù)都會(huì)依賴(lài)緩存Redis、搜素引擎Solr等等外部的資源。如果這些資源不能提供應(yīng)用,雖然服務(wù)組件能與Eureka正常的保持心跳,但是在這樣的情況下,服務(wù)的調(diào)用就不能獲得預(yù)期的效果。在這里,我們可以通過(guò)配置Eureka的健康檢查,將服務(wù)組件的狀態(tài)同步到Eureka中心。
?在開(kāi)發(fā)的微服務(wù)組件中,修改application.xml 開(kāi)啟健康檢查,默認(rèn)是false,依賴(lài)心跳,這里修改成true,
eureka: client: healthcheck: enabled: true?并在pom.xml中添加actuator依賴(lài)(如果不添加,是不起作用的):
org.springframework.boot spring-boot-starter-actuator?Eureka中的實(shí)例包含了多種狀態(tài):UP、DOWN、STARTING、OUTOFSERVICE、UNKNOWN.這里我們可以自定義的實(shí)現(xiàn) org.springframework.boot.actuate.health.HealthIndicator 接口。通過(guò)HTTP接口手動(dòng)的修改服務(wù)組件的狀態(tài),并同步到Eureka.(在實(shí)際的應(yīng)用中,例如緩存宕機(jī),就可以改變當(dāng)前的服務(wù)組件的健康狀態(tài))。
?新建SelfHealthChecker的組件實(shí)現(xiàn)HealthIndicator接口,創(chuàng)建Health對(duì)象,當(dāng)前服務(wù)的健康狀態(tài)隨著health的之變化而變化。
import org.springframework.boot.actuate.health.Health;import org.springframework.boot.actuate.health.HealthIndicator;import org.springframework.stereotype.Component;@Componentpublic class SelfHealthChecker implements HealthIndicator { private boolean health = true; @Override public Health health() { if (health) { return new Health.Builder() .withDetail("a", 10).withDetail("b", "up").up().build(); } else { return new Health.Builder() .withDetail("error", "client is down").down().build(); } } public boolean isHealth() { return health; } public void setHealth(boolean health) { this.health = health; }}?新建控制器,注入自定義的健康檢查組件,可以通過(guò)HTTP接口調(diào)用的方式,改變當(dāng)前的微服務(wù)組件的健康狀態(tài):
這個(gè)時(shí)候,再去查看Eureka的監(jiān)控頁(yè)面,就可以看到服務(wù)提供方的狀態(tài)發(fā)生了變化:
這里我們是可以根據(jù)自己的場(chǎng)景進(jìn)行操作的
二、 Eureka高可用集群
?如果是本機(jī)搭建,首先在host文件中,配置如下的映射(如果不配置,而是使用localhost,那么服務(wù)注冊(cè)的時(shí)候只能注冊(cè)到一個(gè)Eureka實(shí)例中,原因是eureka對(duì)localhost做了過(guò)濾。)
127.0.0.1 eureka7001.com127.0.0.1 eureka7002.com127.0.0.1 eureka7003.com?分別啟動(dòng)3個(gè)eureka實(shí)例,并在每個(gè)實(shí)例的配置中配置其他可用的實(shí)例URL,如下
?appcaiton-s1.xml
#eureka 服務(wù)端spring: application: name: eureka-serverserver: port: 7001eureka: instance: hostname: eureka7001.com #服務(wù)端的實(shí)例名稱(chēng) client: service-url: # 設(shè)置與注冊(cè)中心交互的url , #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #false表示自己就是服務(wù)中細(xì)膩 fetch-registry: false #注冊(cè)自己到注冊(cè)中心 register-with-eureka: true healthcheck: enabled: false?appcaiton-s2.xml
#eureka 服務(wù)端spring: application: name: eureka-serverserver: port: 7002eureka: instance: hostname: eureka7002.com #服務(wù)端的實(shí)例名稱(chēng) client: service-url: # 設(shè)置與注冊(cè)中心交互的url , #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ defaultZone: http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/ #false表示自己就是服務(wù)中細(xì)膩 fetch-registry: false #注冊(cè)自己到注冊(cè)中心 register-with-eureka: true healthcheck: enabled: false?appcaiton-s3.xml
#eureka 服務(wù)端spring: application: name: eureka-server server: port: 7003 eureka: instance: hostname: eureka7003.com #服務(wù)端的實(shí)例名稱(chēng) client: service-url: # 設(shè)置與注冊(cè)中心交互的url , #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/ #false表示自己就是服務(wù)中細(xì)膩 fetch-registry: false #注冊(cè)自己到注冊(cè)中心 register-with-eureka: true healthcheck: enabled: false?打開(kāi)eureka任何一個(gè)示例的監(jiān)控中心,可以看到,每個(gè)eureka將自己也注冊(cè)到了集群中了。
服務(wù)注冊(cè):分別將服務(wù)提供方和服務(wù)調(diào)用方啟動(dòng),注冊(cè)到eureka集群中,例如服務(wù)提供方的配置文件applicaiton.yml配置如下:配置的eureka示例只要配置集群任何一個(gè)eureka示例就可以了
#服務(wù)提供方spring: application: name: server-providerserver: port: 9001eureka: instance: hostname: eureka7002.com #eureka服務(wù)端的實(shí)例名稱(chēng) client: service-url: # 與注冊(cè)中心交互的url defaultZone: http://eureka7002.com:7002/eureka/ enabled: true?通過(guò)集群監(jiān)控面板可以看到如下的信息。這個(gè)時(shí)候,服務(wù)調(diào)用方就可以調(diào)用服務(wù)提供方接口了,就算eureka實(shí)例宕機(jī)一臺(tái),也不影響服務(wù)的調(diào)用。
三、自我保護(hù)模式
?eureka在設(shè)計(jì)時(shí)候充分考慮到了分布式環(huán)境網(wǎng)絡(luò)的不可靠。因?yàn)榫W(wǎng)絡(luò)的原因會(huì)導(dǎo)致eureka的server沒(méi)有收到心跳,但是并不能說(shuō)明eureka是宕機(jī)了。所以Eureka Server默認(rèn)會(huì)打開(kāi)保護(hù)模式。
?一旦進(jìn)入保護(hù)模式,eureka不是刪除里面的服務(wù)注冊(cè)列表數(shù)據(jù),即不會(huì)立刻注銷(xiāo)任何微服務(wù)。服務(wù)調(diào)用者任然嘗試調(diào)用服務(wù)提供者。如果調(diào)用失敗,則會(huì)使用熔斷模式。當(dāng)網(wǎng)絡(luò)故障恢復(fù)后,eureka會(huì)自動(dòng)的退出自我保護(hù)模式。
?修改配置的yml,打開(kāi)或者關(guān)閉注冊(cè)中心的為我保護(hù)模式,false代表關(guān)閉。
eureka: server: enable-self-preservation: false四、其他配置
?eureka默認(rèn)的服務(wù)名稱(chēng)是
${spring.cloud.client.hostname}:${spring.application.name}:${spring.applicaiton.instance_id}:${port}:?如圖:
這里我們可以直接修改,修改成如下圖
eureka: instance: instance-id: P1??自定義Eureka的控制臺(tái)服務(wù)鏈接
??Eureka首頁(yè)顯示服務(wù)調(diào)用的地址默認(rèn)是 http:hostName:port/
??可以通過(guò)配置
eureka: instance: prefer-ip-address: true #設(shè)置服務(wù)調(diào)用IP為先如下圖:
修改后:單擊服務(wù)變成了ip調(diào)用:
五、總結(jié)
?本章講解了Eureka的進(jìn)階內(nèi)容,包括Eureka健康檢查、生產(chǎn)環(huán)境的Eureka集群搭建,也對(duì)常用的配置進(jìn)行了介紹。后期我們會(huì)在這些基礎(chǔ)之上繼續(xù)探索更多的微服務(wù)功能!
?以上就是本期的分享,你可以關(guān)注本博客的#http://hao127.com.cn/#
? ?還可以關(guān)注公眾號(hào): 程序員笑笑生,關(guān)注更多精彩內(nèi)容!
總結(jié)
以上是生活随笔為你收集整理的yml eureka defaultzone 只生效第一个_SpringCloud基础教程(三)-Eureka进阶的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 熹妃q传宠物怎么获得
- 下一篇: 英国提议将《使命召唤》从微软收购动视暴雪