永发信息网

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; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯