instance是什么意思

更新时间:2022-12-28 12:57:28 阅读: 评论:0


2022年12月28日发(作者:李准基图片)

nacos(三)⼼跳检测原理

这篇⽂章主要针对nacos客户端的⼼跳检测。

1.在上⼀篇⽂章已提到注册服务的时候,碰到临时节点需要注册⼼跳检测

@Override

publicvoidregisterInstance(StringrviceName,StringgroupName,Instanceinstance)throwsNacosException{

if(meral()){//临时节点,配置⼼跳检测

BeatInfobeatInfo=newBeatInfo();

viceName(upedName(rviceName,groupName));

(());

t(t());

ster(sterName());

ght(ght());

adata(adata());

eduled(fal);

//配置⼼跳检测间隔,默认5秒

longinstanceInterval=tanceHeartBeatInterval();

iod(instanceInterval==0?DEFAULT_HEART_BEAT_INTERVAL:instanceInterval);

tInfo(upedName(rviceName,groupName),beatInfo);

}

erService(upedName(rviceName,groupName),groupName,instance);

}

2.⼼跳检测间隔是可以改变的,我们可以进⼊tanceHeartBeatInterval()⽅法看看nacos是如何获取的

publiclonggetInstanceHeartBeatInterval(){

//通过⽅法名都可以明⽩意思:根据key去获取检测间隔,如果没有,则选择默认值

returngetMetaDataByKeyWithDefault(_BEAT_INTERVAL,T_HEART_BEAT_INTERVAL);

}

//key名称

publicstaticfinalStringHEART_BEAT_INTERVAL="al";

//默认值5秒

publicstaticfinallongDEFAULT_HEART_BEAT_INTERVAL=is(5);

3.根据HEART_BEAT_INTERVAL常量,我们去设置⾃⼰想要的间隔时间

cloud:

nacos:

discovery:

rver-addr:localhost:8848

heart-beat-interval:10

4.我们继续往下⾛,进⼊tInfo()⽅法,发现⼼跳检测主要是创建了⼀个定时任务,我们看⼀下BeatTask⾥⾯做了什么

publicvoidaddBeatInfo(StringrviceName,BeatInfobeatInfo){

NAMING_("[BEAT]addingbeat:{}tobeatmap.",beatInfo);

Stringkey=buildKey(rviceName,(),t());

BeatInfoexistBeat=null;

//fix#1733

if((existBeat=(key))!=null){

pped(true);

}

//dom2Beat是⼀个concurrenthashmap,当nacos服务关闭时,会⽤到它来销毁定时任务

(key,beatInfo);

le(newBeatTask(beatInfo),iod(),ECONDS);

2BeatSizeMonitor().t(());

}

5.发现BeatTask实现runnable接⼝,at发送⼼跳,发送完后,再创建⼀个定时任务,这个⼼跳检测就能⼀直不间

断进⾏下去,直到nacos服务销毁

classBeatTaskimplementsRunnable{

BeatInfobeatInfo;

publicBeatTask(BeatInfobeatInfo){

fo=beatInfo;

}

@Override

publicvoidrun(){

if(ped()){

return;

}

longresult=at(beatInfo);

longnextTime=result>0?result:iod();

le(newBeatTask(beatInfo),nextTime,ECONDS);

}

}

at(beatInfo)主要是调⽤nacos服务端的API,⾄此⼼跳检测客服端流程⾛完。

publiclongndBeat(BeatInfobeatInfo){

try{

if(NAMING_gEnabled()){

NAMING_("[BEAT]{}ndingbeattorver:{}",namespaceId,ng());

}

Mapparams=newHashMap(4);

("beat",String(beatInfo));

(ACE_ID,namespaceId);

(E_NAME,viceName());

Stringresult=reqAPI(_URL_BASE+"/instance/beat",params,);

JSONObjectjsonObject=bject(result);

if(jsonObject!=null){

g("clientBeatInterval");

}

}catch(Exceptione){

NAMING_("[CLIENT-BEAT]failedtondbeat:"+String(beatInfo),e);

}

return0L;

}

本文发布于:2022-12-28 12:57:28,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/46765.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:entertaining
下一篇:lanier
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图