前面已經簡單的介紹了 Eureka 註冊中心的使用以及查看。下面將繼續進行 Eureka 的說明以及應用。java
在實際生產項目中,爲了保證服務的可用性,連續性,通常來講,都會去搭建應用的集羣來保證服務高可用。Eureka 是天生集羣的,搭建配置至關簡單:不論你有多少的機器部署,只要相互之間指定對方的註冊中心地址就能夠了。無需更多的配置項,方便,快捷。web
有幾臺機器部署 Eureka,就相互註冊下關係,多個 Eureka Server 之間經過複製的方式完成註冊服務的同步。本文中使用兩個節點來進行模擬使用,若是三臺或者更多機器的話,同理可配置。spring
一、建立配置文件安全
Eureka 註冊中心的項目搭建,以前文中已經搭建並可使用。新增配置文件:application-ha02.properties、application-ha03.properties服務器
application-ha02.properties 配置以下app
server.port=8082 spring.application.name=nativeEureka eureka.environment=ha02 eureka.instance.hostname=server2 #是否將本身做爲客戶端註冊到註冊中心:false-不註冊。默認爲true。集羣搭建中,設置true eureka.client.register-with-eureka=true #是否須要從註冊中心檢索獲取服務的註冊信息。默認值爲true #單機版的可設置成false,集羣版的因爲須要同步其餘節點的服務註冊數據,故設成true。 eureka.client.fetch-registry=true #是否開啓自我保護模式,默認值true #eureka server默認在運行期間會去統計心跳失敗比例在 15 分鐘以內是否低於 85%,若是低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過時, #可是在保護期內若是服務恰好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗 eureka.server.enable-self-preservation=false #掃描失效服務的間隔時間,單位毫秒,默認值 60 * 1000 eureka.server.eviction-interval-timer-in-ms=10000 #服務地址 eureka.client.service-url.defaultZone= http://server3:8083/eureka/
application-ha03.properties 配置以下ide
server.port=8083 spring.application.name=nativeEureka eureka.environment=ha03 eureka.instance.hostname=server3 #是否將本身做爲客戶端註冊到註冊中心:false-不註冊。默認爲true。集羣搭建中,設置true eureka.client.register-with-eureka=true #是否須要從註冊中心檢索獲取服務的註冊信息。默認值爲true #單機版的可設置成false,集羣版的因爲須要同步其餘節點的服務註冊數據,故設成true。 eureka.client.fetch-registry=true #是否開啓自我保護模式,默認值true #eureka server默認在運行期間會去統計心跳失敗比例在 15 分鐘以內是否低於 85%,若是低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過時, #可是在保護期內若是服務恰好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗 eureka.server.enable-self-preservation=false #掃描失效服務的間隔時間,單位毫秒,默認值 60 * 1000 eureka.server.eviction-interval-timer-in-ms=10000 #服務地址 eureka.client.service-url.defaultZone= http://server2:8082/eureka/
其中,server二、server3 爲修改本地 hosts 文件。spring-boot
二、分別啓動服務fetch
啓動類 NativeEurekaApplication 中,修改加載配置文件,分別應用 ha02 、ha03 配置文件,組建高可用:ui
package com.cfang; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; import org.springframework.context.annotation.Profile; @SpringBootApplication @EnableEurekaServer public class NativeEurekaApplication { public static void main(String[] args) { // SpringApplication.run(NativeEurekaApplication.class, args); SpringApplication application = new SpringApplication(NativeEurekaApplication.class); // application.setAdditionalProfiles("ha02"); application.setAdditionalProfiles("ha03"); application.run(args); } }
上面代碼中,兩次分別啓動 ha02 和 ha03,啓動兩個 Eureka 註冊中心。
在單節點啓動的時候,會持續報錯 Cannot execute request on any known server、Caused by: java.net.ConnectException: Connection refused: connect。此類異常消息,是由於向集羣中其餘 Eureka 註冊服務時候,由於未開啓而報錯。正常可忽略,待後續逐步啓動了全部 Eureka 服務後,此異常會解決消失。
三、控制檯查看
啓動好後,在 Eureka 控制檯中可查看,分別訪問:http://server2:8082/、http://server3:8083/
從上面能夠看出,DS Replicas、registered-replicas、available-replicas分別有了其餘 Eureka 的地址,即:相互Replicate、相互註冊,則說明Eureka集羣成功。
四、客戶端使用
客戶端使用過程當中,只須要修改配置文件中的註冊中心地址就好了:
eureka.client.service-url.defaultZone= http://server2:8082/eureka/,http://server3:8083/eureka/
有幾個 Eureka 提供服務,就在後面加上就好了。重啓服務,則在全部的 Eureka 上都能查看到服務註冊信息。
Eureka 能夠增長使用 用戶名 和 密碼 的方式進行安全訪問驗證。有點相似 ActiveMQ 的用戶名密碼認證。
一、開啓認證
Eureka 註冊中心項目 nativeEureka 中,增長 pom 依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
新增config
package com.cfang.configuration; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableWebSecurity @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); http.csrf().disable(); //關閉csrf過濾 http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); } }
修改配置文件 application.properties
server.port=8081 spring.application.name=nativeEureka eureka.instance.hostname= server1 #是否將本身做爲客戶端註冊到註冊中心:false-不註冊。默認爲true。 eureka.client.register-with-eureka=false #是否須要從註冊中心檢索獲取服務的註冊信息。默認值爲true #單機版的可設置成false,集羣版的因爲須要同步其餘節點的服務註冊數據,故設成true。 eureka.client.fetch-registry=false #是否開啓自我保護模式,默認值true #eureka server默認在運行期間會去統計心跳失敗比例在 15 分鐘以內是否低於 85%,若是低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過時, #可是在保護期內若是服務恰好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗 eureka.server.enable-self-preservation=false #掃描失效服務的間隔時間,單位毫秒,默認值 60 * 1000 eureka.server.eviction-interval-timer-in-ms=10000 #安全認證信息 security.basic.enabled=true spring.security.user.name=root spring.security.user.password=123456 #服務地址 eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/
主要修改增長安全認證信息。
完成以上幾個步驟後,啓動 Eureka 註冊中心,訪問 http://server1:8081/。會彈出輸入用戶名、密碼:
輸入配置文件中配置的用戶名、密碼後,登入 Eureka 控制檯。
二、Eureka client 端修改
client 端,只須要修改配置文件,在註冊的時候的地址信息就行了,帶上認證信息:
server.port=8701 spring.application.name=nativefshService #是否將本身做爲客戶端註冊到註冊中心:false-不註冊 eureka.client.register-with-eureka=true #安全認證信息 spring.security.user.name=root spring.security.user.password=123456 #服務地址 #eureka.client.service-url.defaultZone= http://server2:8082/eureka/,http://server3:8083/eureka/ eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/
若是用戶名、密碼配置不正確的話,服務註冊失敗,會報錯:com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server 。
一、通用配置
spring.application.name=xxxxxxxxxxxxx :應用名稱配置,將會出如今 Eureka 註冊中心 Application 列
server.port=8701 :應用端口,默認值爲 8761
eureka.instance.hostname= server1 :服務註冊中心應用實例主機名
eureka.instance.ip-address=127.0.0.1 :應用實例ip
eureka.instance.prefer-ip-address=false :客戶端向註冊中心註冊時,相較於 hostname 是否有限使用 ip。在服務中心註冊後,鼠標放到服務的 Status 列的連接上,無需點擊,左下角能看出配置的變化。
eureka.instance.environment=dev :該實例的環境配置
eureka.client.register-with-eureka=false :是否將本身註冊到 Eureka 註冊中心。單機狀況下的 Eureka Server 不須要註冊,集羣的 Eureka Server 以及 Eureka Client 須要註冊。默認值 true
eureka.client.fetch-registry=false :是否須要從註冊中心檢索獲取服務的註冊信息。單機狀況下的 Eureka Server 不須要獲取。集羣的 Eureka Server 以及 Eureka Client 須要獲取。默認值 true
eureka.client.service-url.defaultZone= http://${spring.security.user.name}:${spring.security.user.password}@server1:8081/eureka/ :Eureka 服務的地址信息,中間的佔位符爲安全認證開啓時使用,若是 Eureka Server 爲集羣狀態,則逗號分隔,依次書寫便可。
二、Eureka Server 配置
eureka.server.enable-self-preservation = false :是否開啓自我保護模式,eureka server默認在運行期間會去統計心跳失敗比例在 15 分鐘以內是否低於 85%,若是低於 85%,Eureka Server 會將這些實例保護起來,讓這些實例不會過時,可是在保護期內若是服務恰好這個服務提供者非正常下線了,此時服務消費者就會拿到一個無效的服務實例,此時會調用失敗。默認 true
eureka.server.eviction-interval-timer-in-ms=10000 :掃描失效服務的時間間隔。單位 毫秒。 默認值 60 * 1000
security.basic.enabled=true :開啓 Eureka 安全認證
spring.security.user.name=root :安全認證用戶名
spring.security.user.password=123456 :安全認證密碼
三、Eureka Client 配置
eureka.client.registry-fetch-interval-seconds=30 :客戶端獲取服務註冊信息時間間隔,單位 秒。默認 30
eureka.instance.appname=eureka-client :服務名,默認取 spring.application.name 配置值,若是沒有則爲 unknown
eureka.instance.lease-expiration-duration-in-seconds=90 :服務的失效時間,失效的服務將被註冊中心刪除。時間間隔爲最後一次註冊中心接收到的心跳時間。單位 秒,默認 90
eureka.instance.lease-renewal-interval-in-seconds=30 :應用實例給註冊中心發送心跳的間隔時間,用於代表該服務實例可用。單位 秒。默認30
eureka.client.eureka-server-connect-timeout-seconds=5 :client 鏈接 Eureka 註冊中心的超時時間,單位 秒,默認 5
eureka.client.eureka-server-read-timeout-seconds=8 :client 對 Eureka 服務器讀取信息的超時時間,單位 秒,默認 8
eureka.client.eureka-connection-idle-timeout-seconds=30 :client 鏈接 Eureka 服務端後空閒等待時間,單位 秒,默認 30
eureka.client.eureka-server-total-connections=200 :client 到 全部Eureka 服務端的鏈接總數,默認 200
eureka.client.eureka-server-total-connections-per-host=50 :client 到 Eureka 單服務端的鏈接總數,默認 50