Nacos心跳時(shí)間配置及服務(wù)快速上下線方式
Nacos心跳時(shí)間配置及服務(wù)快速上下線
Nacos默認(rèn)心跳時(shí)間是30秒,不太滿足正式環(huán)境需要,需要調(diào)整心跳時(shí)間更短,讓線上服務(wù)上下線能快速感知。
1.修改微服務(wù)的nacos的心跳配置時(shí)間
preserved.heart.beat.interval: 1000 #該實(shí)例在客戶端上報(bào)心跳的間隔時(shí)間。(單位:毫秒) preserved.heart.beat.timeout: 3000 #該實(shí)例在不發(fā)送心跳后,從健康到不健康的時(shí)間。(單位:毫秒) preserved.ip.delete.timeout: 3000 #該實(shí)例在不發(fā)送心跳后,被nacos下掉該實(shí)例的時(shí)間。(單位:毫秒)
如我的一個(gè)微服務(wù)tower-system的配置如下
spring: ? cloud: ? ? nacos: ? ? ? discovery: ? ? ? ? server-addr: 127.0.0.1:8848 ? ? ? ? metadata:? ? ? ? ? ? preserved.heart.beat.interval: 1000 ? ? ? ? ? preserved.heart.beat.timeout: 3000 ? ? ? ? ? preserved.ip.delete.timeout: 3000
2.修改spring cloud的gateway的ribbion配置
修改了步驟1中的配置后,nacos的控制臺(tái),能保證微服務(wù)3秒內(nèi)能快速響應(yīng)上下線,但我們的訪問是通過(guò)gateway統(tǒng)一訪問的,gateway集成了ribbion的負(fù)載均衡功能,其默認(rèn)是定時(shí)一定的時(shí)間間隔去nacos拉取最新的服務(wù)實(shí)例數(shù)據(jù)到本地緩存,因此,僅僅修改nacos的配置,還是不能保證能及時(shí)的進(jìn)行服務(wù)上下線,需要設(shè)置ribbon.ServerListRefreshInterval,增加拉取nacos中最新服務(wù)實(shí)例的頻率,如下`
#ribbon config,Interval to refresh the server list from the source? ribbon:? ? ServerListRefreshInterval: 3000
步驟1可能需要花3秒中更新實(shí)例,步驟2定時(shí)拉取nacos最新實(shí)例需要最快3秒,因此加起來(lái),可能需要花費(fèi)最多6秒,能使最新的服務(wù)生效
Nacos心跳機(jī)制
Nacos內(nèi)部注冊(cè)的服務(wù)分為兩大類:
- 臨時(shí)實(shí)例(默認(rèn))
- 持久化實(shí)例
可以通過(guò).yml中設(shè)置ephemeral屬性來(lái)確定服務(wù)為臨時(shí)或永久。
例如:
spring: ? cloud: ? ? nacos: ? ? ? discovery: ? ? ? ? # 定義nacos運(yùn)行的路徑 ? ? ? ? server-addr: localhost:8848 ? ? ? ? # ephemeral 設(shè)置當(dāng)前項(xiàng)目啟動(dòng)時(shí)注冊(cè)到nacos的類型true(默認(rèn)):臨時(shí)實(shí)例false:永久化實(shí)例 ? ? ? ? ephemeral: true
臨時(shí)實(shí)例和永久實(shí)力的區(qū)別:
臨時(shí)實(shí)例
默認(rèn)情況下,啟動(dòng)服務(wù)后,每隔5秒會(huì)向nacos發(fā)送一個(gè)"心跳包",這個(gè)心跳包中包含了當(dāng)前服務(wù)的基本信息
Nacos收到這個(gè)"心跳包"如果發(fā)現(xiàn)這個(gè)服務(wù)的信息不在注冊(cè)列表中,就進(jìn)行注冊(cè),如果這個(gè)服務(wù)的信息在注冊(cè)列表中就表明這個(gè)服務(wù)還是健康的
如果Nacos15秒內(nèi)沒接收到某個(gè)服務(wù)的心跳包,Nacos會(huì)將這個(gè)服務(wù)標(biāo)記為不健康的狀態(tài)
如果30秒內(nèi)沒有接收到這個(gè)服務(wù)的心跳包,Nacos會(huì)將這個(gè)服務(wù)從注冊(cè)列表中剔除
這些時(shí)間都是可以通過(guò)配置修改的
持久化實(shí)例(永久實(shí)例)
持久化實(shí)例啟動(dòng)時(shí)向nacos注冊(cè),nacos會(huì)對(duì)這個(gè)實(shí)例進(jìn)行持久化處理
心跳包的規(guī)則和臨時(shí)實(shí)例一致,只是不會(huì)將該服務(wù)從列表中剔除
各類型使用時(shí)機(jī)
一般情況下,我們創(chuàng)建的服務(wù)都是臨時(shí)實(shí)例。
只有項(xiàng)目的主干業(yè)務(wù)才會(huì)設(shè)置為永久實(shí)例。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java使用文件流實(shí)現(xiàn)查看下載次數(shù)
這篇文章主要為大家詳細(xì)介紹了java使用文件流實(shí)現(xiàn)查看下載次數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
SpringCloud Netflix Ribbon超詳細(xì)講解
這篇文章主要介紹了SpringCloud筆記HoxtonNetflix之Ribbon負(fù)載均衡,Ribbon是管理HTTP和TCP服務(wù)客戶端的負(fù)載均衡器,Ribbon具有一系列帶有名稱的客戶端(Named Client),對(duì)SpringCloud Ribbon負(fù)載均衡相關(guān)知識(shí)感興趣的朋友一起看看吧2022-10-10
mybatis自動(dòng)填充時(shí)間字段示例代碼
這篇文章主要給大家介紹了關(guān)于mybatis自動(dòng)填充時(shí)間字段的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
MyBatis?超詳細(xì)講解動(dòng)態(tài)SQL的實(shí)現(xiàn)
動(dòng)態(tài)?SQL?是?MyBatis?的強(qiáng)大特性之一。如果你使用過(guò)?JDBC?或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接?SQL?語(yǔ)句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號(hào)。利用動(dòng)態(tài)?SQL,可以徹底擺脫這種痛苦2022-03-03
SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔
在多人協(xié)作的開發(fā)過(guò)程中,API文檔不僅可以減少等待,也能保證開發(fā)的持續(xù)進(jìn)行,這篇文章主要給大家介紹了關(guān)于SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔的相關(guān)資料,需要的朋友可以參考下2021-07-07
Java使用CompletableFuture實(shí)現(xiàn)異步編程
在現(xiàn)代 Java 開發(fā)中,異步編程是一項(xiàng)重要技能,而 CompletableFuture 是從 Java 8 開始提供的一個(gè)功能強(qiáng)大的工具,用于簡(jiǎn)化異步任務(wù)的編寫和組合,本文將詳細(xì)介紹 CompletableFuture 的基本使用和一些常見的應(yīng)用場(chǎng)景,需要的朋友可以參考下2025-01-01
SpringBoot連接MYSQL數(shù)據(jù)庫(kù)并使用JPA進(jìn)行操作
今天給大家介紹一下如何SpringBoot中連接Mysql數(shù)據(jù)庫(kù),并使用JPA進(jìn)行數(shù)據(jù)庫(kù)的相關(guān)操作。2017-04-04

