SpringCloud-Eureka
1. Eureka簡介
Eureka是在Java語言上,基于Restful Api開發(fā)的服務(wù)注冊與發(fā)現(xiàn)組件,Springcloud Netflix中的重要組件。
注冊中心可以說是微服務(wù)架構(gòu)中的”通訊錄“,它記錄了服務(wù)和服務(wù)地址的映射關(guān)系。在分布式架構(gòu)中, 服務(wù)會注冊到這里,當(dāng)服務(wù)需要調(diào)用其它服務(wù)時,就這里找到服務(wù)的地址,進(jìn)行調(diào)用。

-
Eureka Server 服務(wù)注冊中心
提供服務(wù)注冊和發(fā)現(xiàn)
-
Service Provider 服務(wù)提供方
將自身服務(wù)注冊到Eureka,從而使服務(wù)消費方能夠找到
-
Service Consumer 服務(wù)消費方
從Eureka獲取注冊服務(wù)列表,從而能夠消費服務(wù)
2. 能干什么
服務(wù)注冊中心是微服務(wù)架構(gòu)非常重要的一個組件,在微服務(wù)架構(gòu)里主要起到了協(xié)調(diào)者的一個作用。
注冊中心一般包含如下幾個功能:
-
服務(wù)發(fā)現(xiàn):
服務(wù)注冊/反注冊:保存服務(wù)提供者和服務(wù)調(diào)用者的信息服務(wù)訂閱/取消訂閱:服務(wù)調(diào)用者訂閱服務(wù)提供者的信息,最好有實時推送的功能服務(wù)路由(可選):具有篩選整合服務(wù)提供者的能力。
-
服務(wù)配置:
配置訂閱:服務(wù)提供者和服務(wù)調(diào)用者訂閱微服務(wù)相關(guān)的配置
配置下發(fā):主動將配置推送給服務(wù)提供者和服務(wù)調(diào)用者
-
服務(wù)健康檢測
檢測服務(wù)提供者的健康情況
3. Quick Start
3.1 eureka-server
創(chuàng)建服務(wù)注冊中心
3.1.1 引入依賴坐標(biāo)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3.1.2 配置application.yml
server:
port: 8080
eureka:
instance:
hostname: localhost
client:
# 是否將自己注冊到Eureka服務(wù)中,本身就是所有無需注冊
registerWithEureka: false
# 是否從Eureka中獲取注冊信息
fetchRegistry: false
# 客戶端與Eureka服務(wù)端進(jìn)行交互的地址
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
3.1.3 配置啟動類
//激活Eureka Server端配置
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
3.1.4 服務(wù)注冊中心管理后臺
瀏覽器輸入:localhost:8080訪問注冊中心管理后臺

3.2 eureka-client
創(chuàng)建provider服務(wù),將服務(wù)注冊到注冊中心
3.2.1 引入依賴坐標(biāo)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2.2 配置application.yml
server:
port: 8082
spring:
application:
name: provider
eureka:
client:
# eureka server的路徑
serviceUrl:
defaultZone: http://localhost:8080/eureka/
instance:
#使用ip注冊
prefer-ip-address: true
3.2.3 配置啟動類
package com.ldx.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
//開啟Eureka客戶端發(fā)現(xiàn)功能
//@EnableDiscoveryClient
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
從Spring Cloud Edgware版本開始, @EnableDiscoveryClient 或 @EnableEurekaClient 可省略。只需加上相關(guān)依賴,并進(jìn)行相應(yīng)配置,即可將微服務(wù)注冊到服務(wù)發(fā)現(xiàn)組件上。
重復(fù)上述操作,完成consumer服務(wù)的注冊。
3.2.4 查看注冊中心管理后臺
如圖 兩個服務(wù)已成功注冊到服務(wù)注冊中心。

4. Eureka中的自我保護(hù)

微服務(wù)第一次注冊成功之后,每30秒會發(fā)送一次心跳將服務(wù)的實例信息注冊到注冊中心。通知Eureka Server該實例仍然存在。如果超過90秒沒有發(fā)送更新,則服務(wù)器將從注冊信息中將此服務(wù)移除。
Eureka Server在運行期間,會統(tǒng)計心跳失敗的比例在15分鐘之內(nèi)是否低于85%,如果出現(xiàn)低于的情況 (在單機(jī)調(diào)試的時候很容易滿足,實際在生產(chǎn)環(huán)境上通常是由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致),Eureka Server會將當(dāng)前的實例注冊信息保護(hù)起來,同時提示這個警告。保護(hù)模式主要用于一組客戶端和Eureka Server 之間存在網(wǎng)絡(luò)分區(qū)場景下的保護(hù)。一旦進(jìn)入保護(hù)模式,Eureka Server將會嘗試保護(hù)其服務(wù)注冊表中的信息,不再刪除服務(wù)注冊表中的數(shù)據(jù)(也就是不會注銷任何微服務(wù)) 驗證完自我保護(hù)機(jī)制開啟后,并不會馬上呈現(xiàn)到web上,而是默認(rèn)需等待 5 分鐘(可以通過eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分鐘后你會看到下面的提示信息:

可以通過設(shè)置 eureka.enableSelfPreservation=false 來關(guān)閉自我保護(hù)功能。
5. Eureka中的元數(shù)據(jù)
Eureka的元數(shù)據(jù)有兩種:標(biāo)準(zhǔn)元數(shù)據(jù)和自定義元數(shù)據(jù)
標(biāo)準(zhǔn)元數(shù)據(jù):主機(jī)名、IP地址、端口號、狀態(tài)頁和健康檢查等信息,這些信息都會被發(fā)布在服務(wù)注 冊表中,用于服務(wù)之間的調(diào)用。
自定義元數(shù)據(jù):可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存儲格式。這些元數(shù)據(jù)可以在遠(yuǎn)程客戶端中訪問。
在程序中可以使用DiscoveryClient 獲取指定微服務(wù)的所有元數(shù)據(jù)信息
在provider模塊中添加metadata配置:
eureka:
client:
# eureka server的路徑
serviceUrl:
defaultZone: http://localhost:8080/eureka/
instance:
#使用ip注冊
prefer-ip-address: true
#添加元數(shù)據(jù)
metadata-map:
name: myprovider
age: 18
在consumer中添加測試類
package com.ldx.consumer.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@SpringBootTest
@RunWith(SpringRunner.class)
public class RestTemplateTest {
@Autowired
private DiscoveryClient discoveryClient;
@Test
public void test() {
//根據(jù)微服務(wù)名稱從注冊中心獲取相關(guān)的元數(shù)據(jù)信息
List<ServiceInstance> instances = discoveryClient.getInstances("provider");
for (ServiceInstance instance : instances) {
System.out.println("secure:" + instance.isSecure());
System.out.println("scheme:" + instance.getScheme());
System.out.println("ubstabceId:" + instance.getInstanceId());
System.out.println("serviceId:" + instance.getServiceId());
System.out.println("host:" + instance.getHost());
System.out.println("port:" + instance.getPort());
System.out.println("uri:" + instance.getUri());
System.out.println("metadata:" + instance.getMetadata());
}
}
}
測試結(jié)果如下
secure:false
scheme:http
ubstabceId:192.168.0.102:provider:8082
serviceId:PROVIDER
host:192.168.0.102
port:8082
uri:http://192.168.0.102:8082
metadata:{name=myprovider, management.port=8082, age=18}
6. Eureka的認(rèn)證
我們啟動了Eureka Server,然后在瀏覽器中輸入http://localhost:8080/后,直接回車,就進(jìn)入了spring cloud的服務(wù)治理頁面,這么做在生產(chǎn)環(huán)境是極不安全的,下面,我們就給Eureka Server加上安全的用戶認(rèn)證。
6.1 配置Eureka Server
6.1.1 引入坐標(biāo)依賴
在pom.xml中添加spring-boot-starter-seurity的依賴,該依賴為Eureka Server提供用戶認(rèn)證的能力。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
6.1.2 配置application.yml
修改 application.properties 增加以下配置
如何不進(jìn)行配置,則默認(rèn)用戶名是 user ,默認(rèn)密碼是一個隨機(jī)值,會在項目啟動時打印出來。
spring:
security:
user:
name: admin
password: admin123
6.1.3 關(guān)閉認(rèn)證
在Eureka Server中添加如下配置類即可關(guān)閉Csrf校驗
@Configuration
public class EurekaConfiguration {
/**
* 2.1版本的security默認(rèn)加上了 csrf 攔截, 所以需要通過重寫方法, 把csrf攔截禁用
* 不寫,客戶端無法注冊服務(wù)
*/
@EnableWebSecurity
static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}
}
6.1.4 啟動項目
啟動項目,訪問 http://localhost:8080/ 即可看見身份驗證的對話框,輸出設(shè)置的用戶名和密碼即可進(jìn)入。

6.2 配置Eureka Client
Eureka Server開啟認(rèn)證后,客戶端默認(rèn)情況下是無法注冊的,只有認(rèn)證才可以,當(dāng)然配置很簡單,只需修改defaultZone即可:
http://${user.name}:${user.password}@${host}:${port}/eureka
defaultZone: http://admin:admin123@localhost:8080/eureka/
修改完成后啟動項目,查看控制臺

7. 服務(wù)的監(jiān)控
我們除了可以在Eureka控制面板中監(jiān)控微服務(wù)的狀態(tài)外,我們還可以結(jié)合springboot-admin查看服務(wù)的具體參數(shù),運行參數(shù)等
添加模塊admin-server 主要用作監(jiān)控的服務(wù)端,被監(jiān)控的服務(wù)作為客戶端
7.1 配置admin-server
7.1.1 引入坐標(biāo)依賴
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<!--
因為admin服務(wù)也屬于微服務(wù)中的模塊,所以將admin-server注冊到Eureka中
這樣做還有個好處,admin-server能自動從注冊中心中獲取其他服務(wù)的信息
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
7.1.2 配置application.yml
server:
port: 8083
spring:
application:
name: admin-server
eureka:
client:
# eureka server的路徑
serviceUrl:
defaultZone: http://admin:admin123@localhost:8080/eureka/
instance:
#使用ip注冊
prefer-ip-address: true
# 續(xù)約更新時間間隔,一般設(shè)置比續(xù)約到期時間少,該配置表示,每隔30秒就向服務(wù)端發(fā)送心跳。
lease-renewal-interval-in-seconds: 30
# 續(xù)約到期時間,可以單獨給每個服務(wù)設(shè)置,如果在90秒(默認(rèn))內(nèi)沒有給服務(wù)發(fā)送心跳,則剔除該服務(wù)。
lease-expiration-duration-in-seconds: 90
# springboot-admin 相關(guān)配置
management:
endpoints:
web:
exposure:
#開放所有頁面節(jié)點 默認(rèn)只開啟了health、info兩個節(jié)點
include: '*'
endpoint:
health:
#顯示健康具體信息 默認(rèn)不會顯示詳細(xì)信息
show-details: always
# 利用info端點,將版本等信息加入到springboot-admin中
info:
name: @project.artifactId@
group: @project.groupId@
version: @project.version@
description: @project.description@
#還可以自定義信息
author: ldx
7.1.3 修改啟動類
添加@EnableAdminServer注解,將其標(biāo)記為admin server
@EnableAdminServer
@SpringBootApplication
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}
7.1.4 啟動項目
啟動項目,訪問
localhost:8083

點擊應(yīng)用墻進(jìn)入admin-server詳情頁面

在詳情頁面就可以查看服務(wù)的各種詳情信息,還可以進(jìn)入日志配置,熱修改服務(wù)的日志級別

7.2 配置admin-client
將其他服務(wù)注冊到admin-server中
以provider服務(wù)為例
7.2.1 引入依賴坐標(biāo)
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
7.2.2 配置application.yml
server:
port: 8082
spring:
# 不用再添加admin-server的地址了,因為服務(wù)可以通過Eureka注冊中心自動的將服務(wù)注冊到admin-server中
# boot:
# admin:
# client:
# url: http://localhost:8083
application:
name: provider
eureka:
client:
# eureka server的路徑
serviceUrl:
defaultZone: http://admin:admin123@localhost:8080/eureka/
# 每隔30秒就去注冊中心拉取注冊表信息。
registry-fetch-interval-seconds: 30
#需要將我的服務(wù)注冊到eureka上
register-with-eureka: true
instance:
#使用ip注冊
prefer-ip-address: true
# 實例名稱 最后呈現(xiàn)地址:ip:port
# 默認(rèn)值為:${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
instance-id: ${spring.cloud.client.ip-address}:${server.port}
# 續(xù)約更新時間間隔,一般設(shè)置比續(xù)約到期時間少,該配置表示,每隔30秒就向服務(wù)端發(fā)送心跳。
lease-renewal-interval-in-seconds: 30
# 續(xù)約到期時間,可以單獨給每個服務(wù)設(shè)置,如果在90秒(默認(rèn))內(nèi)沒有給服務(wù)發(fā)送心跳,則剔除該服務(wù)。
lease-expiration-duration-in-seconds: 90
management:
endpoints:
web:
exposure:
#開放所有頁面節(jié)點 默認(rèn)只開啟了health、info兩個節(jié)點
include: '*'
endpoint:
health:
#顯示健康具體信息 默認(rèn)不會顯示詳細(xì)信息
show-details: always
# 利用info端點,加入版本等信息
info:
name: @project.artifactId@
group: @project.groupId@
version: @project.version@
description: @project.description@
#還可以自定義信息
author: ldx
7.2.3 啟動項目
查看admin-server控制臺

查看服務(wù)詳情信息

8. Eureka 服務(wù)下線
比如有些情況是服務(wù)主機(jī)意外宕機(jī)了,也就意味著服務(wù)沒辦法給 eureka 心跳信息了,但是 eureka 在沒有接受到心跳的情況下依賴維護(hù)該服務(wù) 90s,在這 90s 之內(nèi)可能會有客戶端調(diào)用 到該服務(wù),這就可能會導(dǎo)致調(diào)用失敗。所以我們必須要有一個機(jī)制能手動的立馬把宕機(jī)的服 務(wù)從 eureka 服務(wù)列表中清除掉,避免被服務(wù)調(diào)用方調(diào)用到。
8.1 確定需要強(qiáng)行剔除的服務(wù)

8.2 執(zhí)行接口
Eureka 提供了下線接口 用delete 方式請求
http://{ip}:{port}/eureka/apps/服務(wù)名/應(yīng)用id

8.3 查看Eureka控制臺
刷新eureka 發(fā)現(xiàn)服務(wù)消失了
但是我們沒有停止服務(wù),等一會因為心跳會重新注冊的

9. Eureka 高可用
高可用是在服務(wù)架構(gòu)設(shè)計中,頻繁出現(xiàn)的詞匯。微服務(wù)架構(gòu)里自然也一樣需要保證服務(wù)的高可用性,所以本小節(jié)將簡單說明一下Eureka是如何實現(xiàn)高可用的。
在實際生產(chǎn)環(huán)境中服務(wù)器是很脆弱的,單臺服務(wù)器肯定是無法滿足高可用的需求,為了保證高可用性我們通常會準(zhǔn)備多臺服務(wù)器。但可以發(fā)現(xiàn)上文中所搭建的eureka server是單機(jī)的,若這個eureka server宕機(jī),則會導(dǎo)致與之關(guān)聯(lián)的全部微服務(wù)發(fā)生故障。
在微服務(wù)中我們要考慮到發(fā)生故障的情況,所以說對服務(wù)注冊中心也要進(jìn)行高可用部署。
官方對于Eureka 高可用的描述:
Eureka can be made even more resilient and available by running multiple instances and asking them to register with each other. In fact, this is the default behaviour, so all you need to do to make it work is add a valid serviceUrl to a peer, e.g.
就是通過多個eureka實例進(jìn)行互相注冊,然后修改每個實例的serviceUrl即可。Eureka Server的高可用實際上就是將自己作為服務(wù)向其他服務(wù)注冊中心注冊自己,這樣就可以形成一組互相注冊的服務(wù)注冊中心,以實現(xiàn)服務(wù)清單的互相同步,達(dá)到高可用的效果。
9.1 單點配置
之前eureka-server的單點配置
不讓服務(wù)注冊中心注冊自己
server:
port: 8080
eureka:
instance:
hostname: localhost
client:
# 是否將自己注冊到Eureka服務(wù)中,本身就是所有無需注冊
registerWithEureka: false
# 是否從Eureka中獲取注冊信息
fetchRegistry: false
# 客戶端與Eureka服務(wù)端進(jìn)行交互的地址
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
9.2 高可用配置
如果有三個Eureka,則每一個EurekaServer都需要注冊到其它幾個Eureka服務(wù)中,例如:有三個分別為8066、 8077、8088,則:

8066要注冊到8077和8088上
8077要注冊到8066和8088上
8088要注冊到8066和8077上
動手搭建高可用的EurekaServer
9.2.1 創(chuàng)建三份application.yml

修改hosts文件 添加peer1,peer2,peer3 域名
application-8066.yml
設(shè)置port為8066,hostname為peer1,application.name為eureka-server,并將其注冊到peer2和peer3中其余基本都為默認(rèn)配置
必須將eureka.client.registerWithEureka 和 eureka.client.fetchRegistry 設(shè)置為true
server:
port: 8066
eureka:
instance:
hostname: peer1
client:
# 是否將自己注冊到Eureka服務(wù)中
registerWithEureka: true
# 是否從Eureka中獲取注冊信息
fetchRegistry: true
# 客戶端與Eureka服務(wù)端進(jìn)行交互的地址
serviceUrl:
defaultZone: http://admin:admin123@peer2:8077/eureka/,http://admin:admin123@peer3:8088/eureka/
server:
#自我保護(hù)模式,當(dāng)出現(xiàn)出現(xiàn)網(wǎng)絡(luò)分區(qū)、eureka 在短時間內(nèi)丟失過多客戶端時,會進(jìn)入自我保護(hù)模式
#即一個服務(wù)長時間沒有發(fā)送心跳,eureka 也不會將其刪 除,默認(rèn)為 true
enable-self-preservation: true
#Eureka Server 在運行期間會去統(tǒng)計心跳失敗比例在 15 分鐘之內(nèi)是否低 于 85%
#如果低于 85%,Eureka Server 會將這些實例保護(hù)起來
renewal-percent-threshold: 0.85
#eureka server 清理無效節(jié)點的時間間隔,默認(rèn) 60000 毫秒,即 60 秒
eviction-interval-timer-in-ms: 60000
spring:
security:
user:
name: admin
password: admin123
application:
name: eureka-server
application-8077.yml
設(shè)置port為8077,hostname為peer2,application.name為eureka-server,并將其注冊到peer1和peer3中其余基本都為默認(rèn)配置
必須將eureka.client.registerWithEureka 和 eureka.client.fetchRegistry 設(shè)置為true
server:
port: 8077
eureka:
instance:
hostname: peer2
client:
# 是否將自己注冊到Eureka服務(wù)中,本身就是所有無需注冊
registerWithEureka: true
# 是否從Eureka中獲取注冊信息
fetchRegistry: true
# 客戶端與Eureka服務(wù)端進(jìn)行交互的地址
serviceUrl:
defaultZone: http://admin:admin123@peer1:8066/eureka/,http://admin:admin123@peer3:8088/eureka/
server:
#自我保護(hù)模式,當(dāng)出現(xiàn)出現(xiàn)網(wǎng)絡(luò)分區(qū)、eureka 在短時間內(nèi)丟失過多客戶端時,會進(jìn)入自我保護(hù)模式
#即一個服務(wù)長時間沒有發(fā)送心跳,eureka 也不會將其刪 除,默認(rèn)為 true
enable-self-preservation: true
#Eureka Server 在運行期間會去統(tǒng)計心跳失敗比例在 15 分鐘之內(nèi)是否低 于 85%
#如果低于 85%,Eureka Server 會將這些實例保護(hù)起來
renewal-percent-threshold: 0.85
#eureka server 清理無效節(jié)點的時間間隔,默認(rèn) 60000 毫秒,即 60 秒
eviction-interval-timer-in-ms: 60000
spring:
security:
user:
name: admin
password: admin123
application:
name: eureka-server
application-8088.yml
設(shè)置port為8088,hostname為peer3,application.name為eureka-server,并將其注冊到peer1和peer2中其余基本都為默認(rèn)配置
必須將eureka.client.registerWithEureka 和 eureka.client.fetchRegistry 設(shè)置為true
server:
port: 8088
eureka:
instance:
hostname: peer3
client:
# 是否將自己注冊到Eureka服務(wù)中,本身就是所有無需注冊
registerWithEureka: true
# 是否從Eureka中獲取注冊信息
fetchRegistry: true
# 客戶端與Eureka服務(wù)端進(jìn)行交互的地址
serviceUrl:
defaultZone: http://admin:admin123@peer1:8066/eureka/,http://admin:admin123@peer2:8077/eureka/
server:
#自我保護(hù)模式,當(dāng)出現(xiàn)出現(xiàn)網(wǎng)絡(luò)分區(qū)、eureka 在短時間內(nèi)丟失過多客戶端時,會進(jìn)入自我保護(hù)模式
#即一個服務(wù)長時間沒有發(fā)送心跳,eureka 也不會將其刪 除,默認(rèn)為 true
enable-self-preservation: true
#Eureka Server 在運行期間會去統(tǒng)計心跳失敗比例在 15 分鐘之內(nèi)是否低 于 85%
#如果低于 85%,Eureka Server 會將這些實例保護(hù)起來
renewal-percent-threshold: 0.85
#eureka server 清理無效節(jié)點的時間間隔,默認(rèn) 60000 毫秒,即 60 秒
eviction-interval-timer-in-ms: 60000
spring:
security:
user:
name: admin
password: admin123
application:
name: eureka-server
注意
Eureka高可用部署,啟動多個注冊中心后,節(jié)點均出現(xiàn)在unavailable-replicas,查閱各類資料測試,提供方案
- eureka.client.serviceUrl.defaultZone配置項的地址,不能使用localhost,要使用域名(測試使用ip也不行,不知道是不是因為單機(jī)測試的問題,最好還是用域名)。
- spring.application.name要一致,不然注冊的client服務(wù)只能發(fā)現(xiàn)配置第一個server。
- fetch-registry、register-with-eureka 都需要設(shè)置為true,要不然集群服務(wù)器數(shù)據(jù)不同步。
9.2.2 創(chuàng)建相應(yīng)的啟動模板
創(chuàng)建三個對應(yīng)的啟動模板

9.2.3 啟動程序

9.2.4 訪問注冊中心
瀏覽器輸入
localhost:8066輸入認(rèn)證信息

顯示有兩個可用的副本,當(dāng)然也可以訪問8077,8088 內(nèi)容類似 都展示了其他兩個的副本
9.2.5 客戶端配置
以provider模塊為例
為defaultZone 參數(shù)添加集群配置,將其注冊到多個server中
此時如果斷開8866,則provider也會向8077上注冊。所以依然能夠訪問到provider服務(wù),從而實現(xiàn)服務(wù)注冊中心的高可用。
server:
port: 8082
spring:
application:
name: provider
eureka:
client:
# eureka server的路徑
serviceUrl:
defaultZone: http://admin:admin123@peer1:8066/eureka/,http://admin:admin123@peer2:8077/eureka/,http://admin:admin123@peer3:8088/eureka/
# 每隔30秒就去注冊中心拉取注冊表信息。
registry-fetch-interval-seconds: 30
#需要將我的服務(wù)注冊到eureka上
register-with-eureka: true
instance:
#使用ip注冊
prefer-ip-address: true
# 實例名稱 最后呈現(xiàn)地址:ip:port
# 默認(rèn)值為:${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
instance-id: ${spring.cloud.client.ip-address}:${server.port}
# 續(xù)約更新時間間隔,一般設(shè)置比續(xù)約到期時間少,該配置表示,每隔30秒就向服務(wù)端發(fā)送心跳。
lease-renewal-interval-in-seconds: 30
# 續(xù)約到期時間,可以單獨給每個服務(wù)設(shè)置,如果在90秒(默認(rèn))內(nèi)沒有給服務(wù)發(fā)送心跳,則剔除該服務(wù)。
lease-expiration-duration-in-seconds: 90
management:
endpoints:
web:
exposure:
#開放所有頁面節(jié)點 默認(rèn)只開啟了health、info兩個節(jié)點
include: '*'
endpoint:
health:
#顯示健康具體信息 默認(rèn)不會顯示詳細(xì)信息
show-details: always
# 利用info端點,加入版本等信息
info:
name: @project.artifactId@
group: @project.groupId@
version: @project.version@
description: @project.description@
#還可以自定義信息
author: ldx
10. 配置屬性
| 名稱 | 默認(rèn) | 描述 |
|---|---|---|
| eureka.client.eureka-connection-idle-timeout-seconds | 30 |
指示與eureka服務(wù)器的HTTP連接在關(guān)閉之前可以保持空閑狀態(tài)的時間(以秒為單位)。在AWS環(huán)境中,建議將該值設(shè)置為30秒或更短,因為防火墻會在幾分鐘后清除連接信息,使連接處于混亂狀態(tài),從而清理連接信息。 |
| eureka.client.eureka-server-connect-timeout-seconds | 5 |
指示與eureka服務(wù)器的連接需要超時之前要等待的時間(以秒為單位)。請注意,客戶端中的連接由org.apache.http.client.HttpClient池化,此設(shè)置影響實際的連接創(chuàng)建以及從池中獲取連接的等待時間。 |
| eureka.client.eureka-server-d-n-s-name | 獲取要查詢以獲取eureka服務(wù)器列表的DNS名稱。如果合同通過實現(xiàn)serviceUrls返回服務(wù)URL,則不需要此信息。當(dāng)useDnsForFetchingServiceUrls設(shè)置為true且eureka客戶端希望DNS以某種方式配置時,將使用DNS機(jī)制,以便它可以動態(tài)獲取更改的eureka服務(wù)器。這些更改在運行時有效。 | |
| eureka.client.eureka-server-port | 當(dāng)eureka服務(wù)器列表來自DNS時,獲取用于構(gòu)造服務(wù)URL以便與eureka服務(wù)器聯(lián)系的端口。如果合同返回服務(wù)URL eurekaServerServiceUrls(String),則不需要此信息。當(dāng)useDnsForFetchingServiceUrls設(shè)置為true且eureka客戶端希望DNS以某種方式配置時,將使用DNS機(jī)制,以便它可以動態(tài)獲取更改的eureka服務(wù)器。這些更改在運行時有效。 | |
| eureka.client.eureka-server-read-timeout-seconds | 8 |
指示從尤里卡服務(wù)器讀取超時需要等待多長時間(以秒為單位)。 |
| eureka.client.eureka-server-total-connections | 200 |
獲取從eureka客戶端到所有eureka服務(wù)器的允許的連接總數(shù)。 |
| eureka.client.eureka-server-total-connections-per-host | 50 |
獲取從eureka客戶端到eureka服務(wù)器主機(jī)的允許的連接總數(shù)。 |
| eureka.client.eureka-server-url-context | 當(dāng)eureka服務(wù)器列表來自DNS時,獲取用于構(gòu)造服務(wù)URL以便與eureka服務(wù)器聯(lián)系的URL上下文。如果合同從eurekaServerServiceUrls返回服務(wù)URL,則不需要此信息。當(dāng)useDnsForFetchingServiceUrls設(shè)置為true且eureka客戶端希望DNS以某種方式配置時,將使用DNS機(jī)制,以便它可以動態(tài)獲取更改的eureka服務(wù)器。這些更改在運行時有效。 | |
| eureka.client.eureka-service-url-poll-interval-seconds | 0 |
指示輪詢尤里卡服務(wù)器信息更改的頻率(以秒為單位)。可以添加或刪除Eureka服務(wù)器,并且此設(shè)置控制eureka客戶端應(yīng)該多久知道一次。 |
| eureka.client.prefer-same-zone-eureka | true |
指示此實例是否應(yīng)出于延遲和/或其他原因嘗試在同一區(qū)域中使用eureka服務(wù)器。理想情況下,將eureka客戶端配置為與同一區(qū)域中的服務(wù)器進(jìn)行通信,這些更改在運行時在下一個注冊表獲取周期生效(如registryFetchIntervalSeconds所指定) |
| eureka.client.register-with-eureka | true |
指示此實例是否應(yīng)在eureka服務(wù)器上注冊其信息以供他人發(fā)現(xiàn)。在某些情況下,您不希望發(fā)現(xiàn)實例,而只希望發(fā)現(xiàn)其他實例。 |
| eureka.server.peer-eureka-nodes-update-interval-ms | 0 |
|
| eureka.server.peer-eureka-status-refresh-time-interval-ms | 0 |
|
| ribbon.eureka.enabled | true |
允許將Eureka與功能區(qū)一起使用。 |
| spring.cloud.loadbalancer.eureka.approximate-zone-from-hostname | false |
用于確定是否應(yīng)嘗試zone從主機(jī)名獲取值。 |

浙公網(wǎng)安備 33010602011771號