個人博客:蘭陵笑笑生,歡迎瀏覽博客!java
上一章 SpringCloud基礎教程(二)-服務發現 Eureka當中,咱們介紹了微服務組件當中的服務註冊和發現組件程序員
Eureka,本章將繼續探索Eurea在生產環境中的配置和使用。spring
在上一章當中,咱們初步瞭解了Eureka的使用,雖然最基本的場景,服務註冊、服務發現和消費均可以實現。可是在實際的企業應用時候,就會遇到不少的自定義的配置。特別是在生產環境。緩存
在不添加任何配置的狀況下,Eureka註冊中心和服務之間是經過心跳機制來監測的,若是心跳正常,那麼表明服務是能夠用的。可是實際上不是這樣。咱們開發的微服務組件,大多數都會依賴緩存Redis、搜素引擎Solr等等外部的資源。若是這些資源不能提供應用,雖然服務組件能與Eureka正常的保持心跳,可是在這樣的狀況下,服務的調用就不能得到預期的效果。在這裏,咱們能夠經過配置Eureka的健康檢查,將服務組件的狀態同步到Eureka中心。網絡
在開發的微服務組件中,修改application.xml 開啓健康檢查,默認是false,依賴心跳,這裏修改爲true,app
eureka: client: healthcheck: enabled: true
並在pom.xml中添加actuator依賴(若是不添加,是不起做用的):分佈式
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Eureka中的實例包含了多種狀態:UP、DOWN、STARTING、OUT_OF_SERVICE、UNKNOWN.這裏咱們能夠自定義的實現 org.springframework.boot.actuate.health.HealthIndicator 接口。經過HTTP接口手動的修改服務組件的狀態,並同步到Eureka.(在實際的應用中,例如緩存宕機,就能夠改變當前的服務組件的健康狀態)。ide
新建SelfHealthChecker的組件實現HealthIndicator接口,建立Health對象,當前服務的健康狀態隨着health的之變化而變化。spring-boot
import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public 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; } }
新建控制器,注入自定義的健康檢查組件,能夠經過HTTP接口調用的方式,改變當前的微服務組件的健康狀態:微服務
這個時候,再去查看Eureka的監控頁面,就能夠看到服務提供方的狀態發生了變化:
這裏咱們是能夠根據本身的場景進行操做的
若是是本機搭建,首先在host文件中,配置以下的映射(若是不配置,而是使用localhost,那麼服務註冊的時候只能註冊到一個Eureka實例中,緣由是eureka對localhost作了過濾。)
127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com
分別啓動3個eureka實例,並在每一個實例的配置中配置其餘可用的實例URL,以下
appcaiton-s1.xml
#eureka 服務端 spring: application: name: eureka-server server: port: 7001 eureka: instance: hostname: eureka7001.com #服務端的實例名稱 client: service-url: # 設置與註冊中心交互的url , #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #false表示本身就是服務中細膩 fetch-registry: false #註冊本身到註冊中心 register-with-eureka: true healthcheck: enabled: false
appcaiton-s2.xml
#eureka 服務端 spring: application: name: eureka-server server: port: 7002 eureka: instance: hostname: eureka7002.com #服務端的實例名稱 client: service-url: # 設置與註冊中心交互的url , #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ defaultZone: http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/ #false表示本身就是服務中細膩 fetch-registry: false #註冊本身到註冊中心 register-with-eureka: true healthcheck: enabled: false
appcaiton-s3.xml
#eureka 服務端 spring: application: name: eureka-server server: port: 7003 eureka: instance: hostname: eureka7003.com #服務端的實例名稱 client: service-url: # 設置與註冊中心交互的url , #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/ #false表示本身就是服務中細膩 fetch-registry: false #註冊本身到註冊中心 register-with-eureka: true healthcheck: enabled: false
打開eureka任何一個示例的監控中心,能夠看到,每一個eureka將本身也註冊到了集羣中了。
服務註冊:分別將服務提供方和服務調用方啓動,註冊到eureka集羣中,例如服務提供方的配置文件applicaiton.yml配置以下:配置的eureka示例只要配置集羣任何一個eureka示例就能夠了
#服務提供方 spring: application: name: server-provider server: port: 9001 eureka: instance: hostname: eureka7002.com #eureka服務端的實例名稱 client: service-url: # 與註冊中心交互的url defaultZone: http://eureka7002.com:7002/eureka/ enabled: true
經過集羣監控面板能夠看到以下的信息。這個時候,服務調用方就能夠調用服務提供方接口了,就算eureka實例宕機一臺,也不影響服務的調用。
eureka在設計時候充分考慮到了分佈式環境網絡的不可靠。由於網絡的緣由會致使eureka的server沒有收到心跳,可是並不能說明eureka是宕機了。因此Eureka Server默認會打開保護模式。
一旦進入保護模式,eureka不是刪除裏面的服務註冊列表數據,即不會馬上註銷任何微服務。服務調用者任然嘗試調用服務提供者。若是調用失敗,則會使用熔斷模式。當網絡故障恢復後,eureka會自動的退出自我保護模式。
修改配置的yml,打開或者關閉註冊中心的爲我保護模式,false表明關閉。
eureka: server: enable-self-preservation: false
eureka默認的服務名稱是
${spring.cloud.client.hostname}:${spring.application.name}:${spring.applicaiton.instance_id}:${port}:
如圖:
這裏咱們能夠直接修改,修改爲以下圖
eureka: instance: instance-id: P1
自定義Eureka的控制檯服務連接
Eureka首頁顯示服務調用的地址默認是 http:hostName:port/
能夠經過配置
eureka: instance: prefer-ip-address: true #設置服務調用IP爲先
以下圖:
修改後:單擊服務變成了ip調用:
本章講解了Eureka的進階內容,包括Eureka健康檢查、生產環境的Eureka集羣搭建,也對經常使用的配置進行了介紹。後期咱們會在這些基礎之上繼續探索更多的微服務功能!
以上就是本期的分享,你能夠關注本博客的#Spring Cloud基礎教程!#
還能夠關注公衆號: 程序員笑笑生,關注更多精彩內容!
本文由博客一文多發平臺 OpenWrite 發佈!
個人博客地址蘭陵笑笑生,歡迎瀏覽!