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)上下線,但我們的訪問(wèn)是通過(guò)gateway統(tǒng)一訪問(wèn)的,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)沒(méi)接收到某個(gè)服務(wù)的心跳包,Nacos會(huì)將這個(gè)服務(wù)標(biāo)記為不健康的狀態(tài)
如果30秒內(nèi)沒(mé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)文章
MybatisPlus #{param}和${param}的用法詳解
這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09如何利用SpringBoot搭建WebService服務(wù)接口
之前項(xiàng)目經(jīng)理想要開(kāi)發(fā)一個(gè)webservice的協(xié)議,給我一個(gè)星期的時(shí)間,后面用springboot開(kāi)發(fā)了webservice,這篇文章主要給大家介紹了關(guān)于如何利用SpringBoot搭建WebService服務(wù)接口的相關(guān)資料,需要的朋友可以參考下2023-11-11Java JDK動(dòng)態(tài)代理實(shí)現(xiàn)原理實(shí)例解析
這篇文章主要介紹了Java JDK動(dòng)態(tài)代理實(shí)現(xiàn)原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Spring @Component自定義注解實(shí)現(xiàn)詳解
@Component是一個(gè)元注解,意思是可以注解其他類注解,如@Controller @Service @Repository @Aspect。官方的原話是:帶此注解的類看為組件,當(dāng)使用基于注解的配置和類路徑掃描的時(shí)候,這些類就會(huì)被實(shí)例化2022-09-09Java?Dubbo服務(wù)調(diào)用擴(kuò)展點(diǎn)Filter使用教程
Dubbo是阿里巴巴公司開(kāi)源的一個(gè)高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過(guò)高性能的RPC實(shí)現(xiàn)服務(wù)的輸出和輸入功能,可以和Spring框架無(wú)縫集成2022-12-12java基本教程之synchronized關(guān)鍵字 java多線程教程
這篇文章主要介紹了java的synchronized原理、synchronized基本規(guī)則、synchronized方法 和 synchronized代碼塊、實(shí)例鎖和全局鎖2014-01-01