Nacos心跳時間配置及服務快速上下線方式
Nacos心跳時間配置及服務快速上下線
Nacos默認心跳時間是30秒,不太滿足正式環(huán)境需要,需要調(diào)整心跳時間更短,讓線上服務上下線能快速感知。
1.修改微服務的nacos的心跳配置時間
preserved.heart.beat.interval: 1000 #該實例在客戶端上報心跳的間隔時間。(單位:毫秒) preserved.heart.beat.timeout: 3000 #該實例在不發(fā)送心跳后,從健康到不健康的時間。(單位:毫秒) preserved.ip.delete.timeout: 3000 #該實例在不發(fā)送心跳后,被nacos下掉該實例的時間。(單位:毫秒)
如我的一個微服務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的控制臺,能保證微服務3秒內(nèi)能快速響應上下線,但我們的訪問是通過gateway統(tǒng)一訪問的,gateway集成了ribbion的負載均衡功能,其默認是定時一定的時間間隔去nacos拉取最新的服務實例數(shù)據(jù)到本地緩存,因此,僅僅修改nacos的配置,還是不能保證能及時的進行服務上下線,需要設(shè)置ribbon.ServerListRefreshInterval,增加拉取nacos中最新服務實例的頻率,如下`
#ribbon config,Interval to refresh the server list from the source? ribbon:? ? ServerListRefreshInterval: 3000
步驟1可能需要花3秒中更新實例,步驟2定時拉取nacos最新實例需要最快3秒,因此加起來,可能需要花費最多6秒,能使最新的服務生效
Nacos心跳機制
Nacos內(nèi)部注冊的服務分為兩大類:
- 臨時實例(默認)
- 持久化實例
可以通過.yml中設(shè)置ephemeral屬性來確定服務為臨時或永久。
例如:
spring: ? cloud: ? ? nacos: ? ? ? discovery: ? ? ? ? # 定義nacos運行的路徑 ? ? ? ? server-addr: localhost:8848 ? ? ? ? # ephemeral 設(shè)置當前項目啟動時注冊到nacos的類型true(默認):臨時實例false:永久化實例 ? ? ? ? ephemeral: true
臨時實例和永久實力的區(qū)別:
臨時實例
默認情況下,啟動服務后,每隔5秒會向nacos發(fā)送一個"心跳包",這個心跳包中包含了當前服務的基本信息
Nacos收到這個"心跳包"如果發(fā)現(xiàn)這個服務的信息不在注冊列表中,就進行注冊,如果這個服務的信息在注冊列表中就表明這個服務還是健康的
如果Nacos15秒內(nèi)沒接收到某個服務的心跳包,Nacos會將這個服務標記為不健康的狀態(tài)
如果30秒內(nèi)沒有接收到這個服務的心跳包,Nacos會將這個服務從注冊列表中剔除
這些時間都是可以通過配置修改的
持久化實例(永久實例)
持久化實例啟動時向nacos注冊,nacos會對這個實例進行持久化處理
心跳包的規(guī)則和臨時實例一致,只是不會將該服務從列表中剔除
各類型使用時機
一般情況下,我們創(chuàng)建的服務都是臨時實例。
只有項目的主干業(yè)務才會設(shè)置為永久實例。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MybatisPlus #{param}和${param}的用法詳解
這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09如何利用SpringBoot搭建WebService服務接口
之前項目經(jīng)理想要開發(fā)一個webservice的協(xié)議,給我一個星期的時間,后面用springboot開發(fā)了webservice,這篇文章主要給大家介紹了關(guān)于如何利用SpringBoot搭建WebService服務接口的相關(guān)資料,需要的朋友可以參考下2023-11-11Java JDK動態(tài)代理實現(xiàn)原理實例解析
這篇文章主要介紹了Java JDK動態(tài)代理實現(xiàn)原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06Spring @Component自定義注解實現(xiàn)詳解
@Component是一個元注解,意思是可以注解其他類注解,如@Controller @Service @Repository @Aspect。官方的原話是:帶此注解的類看為組件,當使用基于注解的配置和類路徑掃描的時候,這些類就會被實例化2022-09-09Java?Dubbo服務調(diào)用擴展點Filter使用教程
Dubbo是阿里巴巴公司開源的一個高性能優(yōu)秀的服務框架,使得應用可通過高性能的RPC實現(xiàn)服務的輸出和輸入功能,可以和Spring框架無縫集成2022-12-12java基本教程之synchronized關(guān)鍵字 java多線程教程
這篇文章主要介紹了java的synchronized原理、synchronized基本規(guī)則、synchronized方法 和 synchronized代碼塊、實例鎖和全局鎖2014-01-01