zookeeper sessiontimeout 多少
答案:2 悬赏:0 手机版
解决时间 2021-02-07 09:47
- 提问者网友:活着好累
- 2021-02-06 15:59
zookeeper sessiontimeout 多少
最佳答案
- 五星知识达人网友:洒脱疯子
- 2021-02-06 17:20
不是600秒,是600分钟,改时间长点当然可以。出现错误,应该不是这里的问题,你再发一下错误提示默认timeout是20
全部回答
- 1楼网友:孤老序
- 2021-02-06 18:41
zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生。
session由sessiontracker产生的,sessiontracker的实现有
sessiontrackerimpl,localsessiontracker,leadersessiontracker(leader),learnersessiontracker(follow
and oberser)四种实现。它们的分支由各自的zookeeperserver.startup()开始。
1.sessiontrackerimpl
标准zookeeperserver的实现
public synchronized void startup() {
if (sessiontracker == null) {
createsessiontracker();
}
startsessiontracker();
setuprequestprocessors();
registerjmx();
state = state.running;
notifyall();
}
其实现由sessiontrackerimpl来实现,其官方说明
protected void createsessiontracker() {
sessiontracker = new sessiontrackerimpl(this, zkdb.getsessionwithtimeouts(),
ticktime, 1, getzookeeperserverlistener());
}
protected void startsessiontracker() {
((sessiontrackerimpl)sessiontracker).start();
}
sessiontrackerimpl是一个线程,其run方法是真实逻辑:
@override
public void run() {
try {
while (running) {
long waittime = sessionexpiryqueue.getwaittime();
if (waittime > 0) {
thread.sleep(waittime);
continue;
}
for (sessionimpl s : sessionexpiryqueue.poll()) {
setsessionclosing(s.sessionid);
expirer.expire(s);
}
}
} catch (interruptedexception e) {
handleexception(this.getname(), e);
}
log.info("sessiontrackerimpl exited loop!");
}
sessiontrackerimpl实现了session的各种操作:创建session,检测session,删除session等。我们以增加session为例,看一下session机制:
public long createsession(int sessiontimeout) {
long sessionid = nextsessionid.getandincrement();
addsession(sessionid, sessiontimeout);
return sessionid;
}
public synchronized boolean addsession(long id, int sessiontimeout) {
sessionswithtimeout.put(id, sessiontimeout);
boolean added = false;
sessionimpl session = sessionsbyid.get(id);
if (session == null){
session = new sessionimpl(id, sessiontimeout);
}
// findbugs2.0.3 complains about get after put.
// long term strategy would be use computeifabsent after jdk 1.8
sessionimpl existedsession = sessionsbyid.putifabsent(id, session);
if (existedsession != null) {
session = existedsession;
} else {
added = true;
log.debug("adding session 0x" + long.tohexstring(id));
}
if (log.istraceenabled()) {
string actionstr = added ? "adding" : "existing";
zootrace.logtracemessage(log, zootrace.session_trace_mask,
"sessiontrackerimpl --- " + actionstr + " session 0x"
+ long.tohexstring(id) + " " + sessiontimeout);
}
updatesessionexpiry(session, sessiontimeout);
return added;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯