柚子快報激活碼778899分享:云原生 eureka技術(shù)分享
柚子快報激活碼778899分享:云原生 eureka技術(shù)分享
EnableEurekaServer : 激活Eureka Server端配置
2、服務注冊中心管理后臺
打開瀏覽器訪問http://localhost8761即可進入EurekaServer內(nèi)置的管理控制臺,顯示效果如下
四、服務注冊到Eureka注冊中心
1、商品服務注冊
(1) 商品模塊中引入坐標
在 shop_service_product 的pom文件中添加eureka client的相關(guān)坐標
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
(2) 配置application.yml文件
在工程的 application.yml 中添加Eureka Server的主機地址
eureka:
client:
serviceUrl: # eureka server的路徑
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true #使用ip注冊
(3) 修改啟動類添加服務注冊注解
@SpringBootApplication
//@EnableDiscoveryClient
//@EnableEurekaClient
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
從Spring Cloud Edgware版本開始, @EnableDiscoveryClient 或 @EnableEurekaClient 可省略。只需加上相關(guān)依賴,并進行相應配置,即可將微服務注冊到服務發(fā)現(xiàn)組件上。
2、訂單服務注冊
和商品微服務一樣,只需要引入坐標依賴,在工程的 application.yml 中添加Eureka Server的主機地址即可
(1) 訂單模塊中引入坐標
在 shop_service_product 的pom文件中添加eureka client的相關(guān)坐標
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
(2) 配置application.yml文件
在工程的 application.yml 中添加Eureka Server的主機地址
eureka:
client:
serviceUrl: # eureka server的路徑
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true #使用ip注冊
(3) 修改啟動類添加服務注冊注解
@SpringBootApplication
//@EnableDiscoveryClient
//@EnableEurekaClient
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
從Spring Cloud Edgware版本開始, @EnableDiscoveryClient 或 @EnableEurekaClient 可省略。只需加上相關(guān)依賴,并進行相應配置,即可將微服務注冊到服務發(fā)現(xiàn)組件上。
五、Eureka中的自我保護
微服務第一次注冊成功之后,每30秒會發(fā)送一次心跳將服務的實例信息注冊到注冊中心。通知 Eureka Server 該實例仍然存在。如果超過90秒沒有發(fā)送更新,則服務器將從注冊信息中將此服務移除。
Eureka Server在運行期間,會統(tǒng)計心跳失敗的比例在15分鐘之內(nèi)是否低于85%,如果出現(xiàn)低于的情況(在單機調(diào)試的時候很容易滿足,實際在生產(chǎn)環(huán)境上通常是由于網(wǎng)絡不穩(wěn)定導致),Eureka Server會將當前的實例注冊信息保護起來,同時提示這個警告。保護模式主要用于一組客戶端和Eureka Server之間存在網(wǎng)絡分區(qū)場景下的保護。一旦進入保護模式,Eureka Server將會嘗試保護其服務注冊表中的信息,不再刪除服務注冊表中的數(shù)據(jù)(也就是不會注銷任何微服務)驗證完自我保護機制開啟后,并不會馬上呈現(xiàn)到web上,而是默認需等待 5 分鐘(可以通eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分鐘后你會看到下面的提示信息:
如果關(guān)閉自我保護
通過設(shè)置 eureka.enableSelfPreservation=false 來關(guān)閉自我保護功能。
六、Eureka中的元數(shù)據(jù)
Eureka的元數(shù)據(jù)有兩種:標準元數(shù)據(jù)和自定義元數(shù)據(jù)。
標準元數(shù)據(jù):主機名、IP地址、端口號、狀態(tài)頁和健康檢查等信息,這些信息都會被發(fā)布在服務注冊表中,用于服務之間的調(diào)用。 自定義元數(shù)據(jù):可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存儲格式。這些元數(shù)據(jù)可以在遠程客戶端中訪問。
在程序中可以使用DiscoveryClient 獲取指定微服務的所有元數(shù)據(jù)信息
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class RestTemplateTest {
@Autowired
private DiscoveryClient discoveryClient;
@Test
public void test() {
//根據(jù)微服務名稱從注冊中心獲取相關(guān)的元數(shù)據(jù)信息
List instances = discoveryClient.getInstances(“shop-service-product”);
for (ServiceInstance instance : instances) {
System.out.println(instance);
}
}
}
七、Eureka高可用集群
Eureka Client會定時連接Eureka Server,獲取注冊表中的信息并緩存到本地。微服務在消費遠程API時總是使用本地緩存中的數(shù)據(jù)。因此一般來說,即使Eureka Server發(fā)生宕機,也不會影響到服務之間的調(diào)用。但如果Eureka Server宕機時,某些微服務也出現(xiàn)了不可用的情況,Eureka Server中的緩存若不被刷新,就可能會影響到微服務的調(diào)用,甚至影響到整個應用系統(tǒng)的高可用。因此,在生成環(huán)境中,通常會部署一個高可用的Eureka Server集群。
Eureka Server可以通過運行多個實例并相互注冊的方式實現(xiàn)高可用部署,Eureka Server實例會彼此增量地同步信息,從而確保所有節(jié)點數(shù)據(jù)一致。事實上,節(jié)點之間相互注冊是Eureka Server的默認行為。
1、搭建 Eureka Server高可用集群
1、修改本機host屬性
127.0.0.1 eureka1
127.0.0.1 eureka2
2、修改 shop_eureka_server 工程中的yml配置文件,添加如下配置屬性
#指定應用名稱
spring:
application:
name: shop-eureka-server
#執(zhí)行peer1的配置信息
spring:
profiles: eureka1
server:
port: 8761
eureka:
instance:
hostname: eureka1
client:
service-url:
defaultZone: http://eureka2:8762/eureka
#執(zhí)行peer2的配置信息
spring:
profiles: eureka2
server:
port: 8762
eureka:
instance:
hostname: eureka2
client:
service-url:
defaultZone: http://eureka1:8761/eureka
在配置文件中通過連字符(—)將文件分為三個部分,第一部分為應用名稱,第二部分和第三部分是根據(jù)不同的profiles選項動態(tài)添加,可以在IDEA啟動時進行激活配置
使用IDEA啟動歷次EurekaServerApplicaion分別激活eureka1和eureka2配置。訪問http://eureka1:8761和http://eureka1:8762/。會發(fā)現(xiàn)注冊中心 SHOP-EUREKA-SERVER 已經(jīng)有兩個節(jié)點,并且registered-replicas (相鄰集群復制節(jié)點)中已經(jīng)包含對方。
2、服務注冊到Eureka Server集群
如果需要將微服務注冊到Eureka Server集群只需要修改yml配置文件即可
eureka:
client:
serviceUrl:
defaultZone: http://eureka1:8761/eureka/,http://eureka1:8761/eureka/
以商品微服務為例,修改defaultZone配置添加多個Eureka Server的地址
八、Eureka中的常見問題
1、服務注冊慢
默認情況下,服務注冊到Eureka Server的過程較慢。SpringCloud官方文檔中給出了詳細的原因
大致含義:服務的注冊涉及到心跳,默認心跳間隔為30s。在實例、服務器、客戶端都在本地緩存中具有相同的元數(shù)據(jù)之前,服務不可用于客戶端發(fā)現(xiàn)(所以可能需要3次心跳)。可以通過配置eureka.instance.leaseRenewalIntervalInSeconds (心跳頻率)加快客戶端連接到其他服務的過程。在生產(chǎn)中,最好堅持使用默認值,因為在服務器內(nèi)部有一些計算,他們對續(xù)約做出假設(shè)。
2、服務節(jié)點剔除問題
默認情況下,由于Eureka Server剔除失效服務間隔時間為90s且存在自我保護的機制。所以不能有效而迅速的剔除失效節(jié)點,這對開發(fā)或測試會造成困擾。解決方案如下:
Eureka Server:
配置關(guān)閉自我保護,設(shè)置剔除無效節(jié)點的時間間隔
eureka:
instance:
hostname: eureka1
client:
service-url:
defaultZone: http://eureka2:8762/eureka
server:
enable-self-preservation: false #關(guān)閉自我保護
eviction-interval-timer-in-ms: 4000 #剔除時間間隔,單位:毫秒
Eureka Client:
配置開啟健康檢查,并設(shè)置續(xù)約時間
eureka:
client:
healthcheck: true #開啟健康檢查(依賴spring-boot-actuator)
serviceUrl:
defaultZone: http://eureka1:8761/eureka/,http://eureka1:8761/eureka/
instance:
preferIpAddress: true
lease-expiration-duration-in-seconds: 10 #eureka client發(fā)送心跳給server端后,續(xù)約到期時間(默認90秒)
lease-renewal-interval-in-seconds: 5 #發(fā)送心跳續(xù)約間隔
3、監(jiān)控頁面顯示ip
在Eureka Server的管控臺中,顯示的服務實例名稱默認情況下是微服務定義的名稱和端口。為了更好的對所有服務進行定位,微服務注冊到Eureka Server的時候可以手動配置示例ID。配置方式如下:
eureka:
instance:
instance-id:
s
p
r
i
n
g
.
c
l
o
u
d
.
c
l
i
e
n
t
.
i
p
?
a
d
d
r
e
s
s
:
{spring.cloud.client.ip-address}:
spring.cloud.client.ip?address:{server.port}
#spring.cloud.client.ip-address:獲取ip地址
九、Eureka配置合集
1、Eureka Server常用配置
eureka:
server:
#服務端開啟自我保護模式
enable-self-preservation: true
#掃描失效服務的間隔時間(單位毫秒,默認是60*1000)即60秒
eviction-interval-timer-in-ms: 60000
#間隔多長時間,清除過期的 delta 數(shù)據(jù)
delta-retention-timer-interval-in-ms: 0
#是否開啟請求頻率限制器
rate-limiter-enabled: false
#請求頻率限制器
rate-limiter-burst-size: 10
#請求頻率的平均值
rate-limiter-full-fetch-average-rate: 100
#是否對標準的client進行頻率請求限制。如果是false,則只對非標準client進行限制
rate-limiter-throttle-standard-clients: false
#注冊服務、拉取服務列表數(shù)據(jù)的請求頻率的平均值
rate-limiter-registry-fetch-average-rate: 500
#設(shè)置信任的client list
rate-limiter-privileged-clients: Collections.emptySet()
#在設(shè)置的時間范圍類,期望與client續(xù)約的百分比。
renewal-percent-threshold: 0.85
#多長時間更新續(xù)約的閾值
renewal-threshold-update-interval-ms: 900000
#對于緩存的注冊數(shù)據(jù),多長時間過期
response-cache-auto-expiration-in-seconds: 180
#多長時間更新一次緩存中的服務注冊數(shù)據(jù)
response-cache-update-interval-ms: 30000
#緩存增量數(shù)據(jù)的時間,以便在檢索的時候不丟失信息
retention-time-in-m-s-in-delta-queue: 180000
#當時間戳不一致的時候,是否進行同步
sync-when-timestamp-differs: true
#是否采用只讀緩存策略,只讀策略對于緩存的數(shù)據(jù)不會過期。
use-read-only-response-cache: true
#============== server node 與 node 之間關(guān)聯(lián)的配置 ==============#
#發(fā)送復制數(shù)據(jù)是否在request中,總是壓縮
enable-replicated-request-compression: false
#指示群集節(jié)點之間的復制是否應批處理以提高網(wǎng)絡效率。
batch-replication: false
#允許備份到備份池的最大復制事件數(shù)量。而這個備份池負責除狀態(tài)更新的其他事件。可以根據(jù)內(nèi)存大小,超時和復制流量,來設(shè)置此值得大小
max-elements-in-peer-replication-pool: 10000
#允許備份到狀態(tài)備份池的最大復制事件數(shù)量
max-elements-in-status-replication-pool: 10000
#多個服務中心相互同步信息線程的最大空閑時間
max-idle-thread-age-in-minutes-for-peer-replication: 15
#狀態(tài)同步線程的最大空閑時間
max-idle-thread-in-minutes-age-for-status-replication: 15
#服務注冊中心各個instance相互復制數(shù)據(jù)的最大線程數(shù)量
max-threads-for-peer-replication: 20
#服務注冊中心各個instance相互復制狀態(tài)數(shù)據(jù)的最大線程數(shù)量
max-threads-for-status-replication: 1
#instance之間復制數(shù)據(jù)的通信時長
max-time-for-replication: 30000
#正常的對等服務instance最小數(shù)量。-1表示服務中心為單節(jié)點。
min-available-instances-for-peer-replication: -1
#instance之間相互復制開啟的最小線程數(shù)量
min-threads-for-peer-replication: 5
#instance之間用于狀態(tài)復制,開啟的最小線程數(shù)量
min-threads-for-status-replication: 1
#instance之間復制數(shù)據(jù)時可以重試的次數(shù)
number-of-replication-retries: 5
#eureka節(jié)點間間隔多長時間更新一次數(shù)據(jù)。默認10分鐘。
peer-eureka-nodes-update-interval-ms: 600000
#eureka服務狀態(tài)的相互更新的時間間隔。
peer-eureka-status-refresh-time-interval-ms: 0
#eureka對等節(jié)點間連接超時時間
peer-node-connect-timeout-ms: 200
#eureka對等節(jié)點連接后的空閑時間
peer-node-connection-idle-timeout-seconds: 30
#節(jié)點間的讀數(shù)據(jù)連接超時時間
peer-node-read-timeout-ms: 200
#eureka server 節(jié)點間連接的總共最大數(shù)量
peer-node-total-connections: 1000
#eureka server 節(jié)點間連接的單機最大數(shù)量
peer-node-total-connections-per-host: 10
#在服務節(jié)點啟動時,eureka嘗試獲取注冊信息的次數(shù)
registry-sync-retries: 0
#在服務節(jié)點啟動時,eureka多次嘗試獲取注冊信息的間隔時間
registry-sync-retry-wait-ms:
#當eureka server啟動的時候,不能從對等節(jié)點獲取instance注冊信息的情況,應等待多長時間。
wait-time-in-ms-when-sync-empty: 0
2、Eureka Client 常用配置
eureka:
client:
#該客戶端是否可用
enabled: true
#實例是否在eureka服務器上注冊自己的信息以供其他服務發(fā)現(xiàn),默認為true
register-with-eureka: false
#此客戶端是否獲取eureka服務器注冊表上的注冊信息,默認為true
fetch-registry: false
#是否過濾掉,非UP的實例。默認為true
filter-only-up-instances: true
#與Eureka注冊服務中心的通信zone和url地址
service-url:
defaultZone: http://
e
u
r
e
k
a
.
i
n
s
t
a
n
c
e
.
h
o
s
t
n
a
m
e
:
{eureka.instance.hostname}:
eureka.instance.hostname:{server.port}/eureka/
#client連接Eureka服務端后的空閑等待時間,默認為30 秒
eureka-connection-idle-timeout-seconds: 30
#client連接eureka服務端的連接超時時間,默認為5秒
eureka-server-connect-timeout-seconds: 5
#client對服務端的讀超時時長
eureka-server-read-timeout-seconds: 8
#client連接all eureka服務端的總連接數(shù),默認200
eureka-server-total-connections: 200
#client連接eureka服務端的單機連接數(shù)量,默認50
eureka-server-total-connections-per-host: 50
#執(zhí)行程序指數(shù)回退刷新的相關(guān)屬性,是重試延遲的最大倍數(shù)值,默認為10
cache-refresh-executor-exponential-back-off-bound: 10
#執(zhí)行程序緩存刷新線程池的大小,默認為5
cache-refresh-executor-thread-pool-size: 2
#心跳執(zhí)行程序回退相關(guān)的屬性,是重試延遲的最大倍數(shù)值,默認為10
heartbeat-executor-exponential-back-off-bound: 10
#心跳執(zhí)行程序線程池的大小,默認為5
heartbeat-executor-thread-pool-size: 5
詢問Eureka服務url信息變化的頻率(s),默認為300秒
eureka-service-url-poll-interval-seconds: 300
#最初復制實例信息到eureka服務器所需的時間(s),默認為40秒
initial-instance-info-replication-interval-seconds: 40
#間隔多長時間再次復制實例信息到eureka服務器,默認為30秒
instance-info-replication-interval-seconds: 30
#從eureka服務器注冊表中獲取注冊信息的時間間隔(s),默認為30秒
registry-fetch-interval-seconds: 30
獲取實例所在的地區(qū)。默認為us-east-1
region: us-east-1
#實例是否使用同一zone里的eureka服務器,默認為true,理想狀態(tài)下,eureka客戶端與服務端是在同一zone下
prefer-same-zone-eureka: true
獲取實例所在的地區(qū)下可用性的區(qū)域列表,用逗號隔開。(AWS)
availability-zones:
china: defaultZone,defaultZone1,defaultZone2
#eureka服務注冊表信息里的以逗號隔開的地區(qū)名單,如果不這樣返回這些地區(qū)名單,則客戶端啟動將會出錯。默認為null
fetch-remote-regions-registry:
#服務器是否能夠重定向客戶端請求到備份服務器。 如果設(shè)置為false,服務器將直接處理請求,如果設(shè)置為true,它可能發(fā)送HTTP重定向到客戶端。默認為false
allow-redirects: false
#客戶端數(shù)據(jù)接收
client-data-accept:
#增量信息是否可以提供給客戶端看,默認為false
disable-delta: false
#eureka服務器序列化/反序列化的信息中獲取“_”符號的的替換字符串。默認為“__“
escape-char-replacement: __
#eureka服務器序列化/反序列化的信息中獲取“$”符號的替換字符串。默認為“_-”
dollar-replacement: “_-”
#當服務端支持壓縮的情況下,是否支持從服務端獲取的信息進行壓縮。默認為true
g-zip-content: true
#是否記錄eureka服務器和客戶端之間在注冊表的信息方面的差異,默認為false
log-delta-diff: false
最后
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長,自己不成體系的自學效果低效漫長且無助。
因此收集整理了一份《2024年Java開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。
既有適合小白學習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,不論你是剛?cè)腴TAndroid開發(fā)的新手,還是希望在技術(shù)上不斷提升的資深開發(fā)者,這些資料都將為你打開新的學習之門!
如果你覺得這些內(nèi)容對你有幫助,需要這份全套學習資料的朋友可以戳我獲取??!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新! 的替換字符串。默認為“__“
escape-char-replacement: __
#eureka服務器序列化/反序列化的信息中獲取“$”符號的替換字符串。默認為“_-”
dollar-replacement: “_-”
#當服務端支持壓縮的情況下,是否支持從服務端獲取的信息進行壓縮。默認為true
g-zip-content: true
#是否記錄eureka服務器和客戶端之間在注冊表的信息方面的差異,默認為false
log-delta-diff: false
最后
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長,自己不成體系的自學效果低效漫長且無助。
因此收集整理了一份《2024年Java開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。
[外鏈圖片轉(zhuǎn)存中…(img-mFnc2FdU-1715305990769)]
[外鏈圖片轉(zhuǎn)存中…(img-a1tMrwJQ-1715305990769)]
[外鏈圖片轉(zhuǎn)存中…(img-OMJdrnTI-1715305990770)]
既有適合小白學習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,不論你是剛?cè)腴TAndroid開發(fā)的新手,還是希望在技術(shù)上不斷提升的資深開發(fā)者,這些資料都將為你打開新的學習之門!
如果你覺得這些內(nèi)容對你有幫助,需要這份全套學習資料的朋友可以戳我獲?。?!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!
柚子快報激活碼778899分享:云原生 eureka技術(shù)分享
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。