ZooKeeper系列:session会话

ZooKeeper的会话机制Session 为什么会有会话机制Session 首先我们看下ZooKeeper的架构图,client跟ZooKeeper集群中的某一台server保持连接,发送读/写请求,读请求直接由当前连接的server处理,写请求由于是事务请求,由当前server转发给leader进行处理。同时,client还能接收来自server端的watcher通知。 而所有的这些交互,都是基于client和ZooKeeper的se... 阅读详情

session会话

客户端在对Zookeeper集群执行任何请求前,都需要先与集群中的服务间里连接,这个连接就是session会话。客户端通过某一个特定的语言套件来创建一个ZooKeeper句柄时,它就会通过服务建立一个会话。客户端初始连接到集群中的某一个服务器或者一个独立的服务器。客户端通过TCP协议与服务器进行连接通信,使用的端口默认是2181,当然这个端口可以在zoo.cfg中修改的,配置如下图

而且会话提供了顺序保障,也就是同一个会话的请求会以FIFO(先进先出)的顺序执行,前提是要保证一个客户端只打开一个会话。如果客户端有多个并发会话,不一定能够保持顺序了。

会话的创建

sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建的时候,ZooKeeper都会为其分配一个全局唯一的sessionID。

Timeout: 会话超时时间,客户端在构造ZooKeeper实例时候,向服务端发送配置的超时时间,server端会根据自己的超时时间限制最终确认会话的超时时间。

TickTime: 下次会话超时时间点,默认2000毫秒,可以在配置文件zoo.cfg中修改,

isClosing: 标记一个会话是否已经关闭,当sever端检测到会话已经超时失效,改会话标记为已关闭,不再处理新的请求。

创建过程如下

  1. 客户端启动程序建立一个会话。
  2. 客户端尝试连接到localhost/127.0.0.1:2181.
  3. 客户端连接成功,服务器开始初始化这个新的会话。
  4. 会话初始化成功。
  5. 服务端向客户端发送一个SyncConnected事件

如上客户端连接的日志,可以看到这个客户端当前的session id以及客户端使用SyncConnected事件通知应用的相关操作。

会话的状态与生命周期

会话的生命周期是指会话从创建到结束的时期(正常关闭或者超时导致过期),

会话的主要状态是:

  • CONNECTING:连接中,此状态的时间很短。
  • CONNECTED:已连接。连接成功之后的状态。
  • CLOSED:已关闭,session过期或者服务端宕机或者客户端主动断开的状态。
  • NOT_CONNECTED:未连接,客户端还没有连接之前的状态。

一个会话从NOT_CONNECTED状态开始,当客户端初始化后转换到CONNECTING状态(1)。正常情况下,成功和zk服务器建立连接后,会话会转换到CONNECTED状态(2)。当客户端与zk服务器断开连接或者无法收到服务器的响应时,就会转换回CONNECTING(3)并尝试发现其他zk服务器,如果发现可用服务器而且确认会话有效后,状态又会转换成CONNECTED。否则会声明会话过期,状态变成CLOSED(4)。

会话超时

在创建会话的时候有个超时检测参数tickTime。如果经过时间t之后服务接收不到这个会话的任何消息,服务就会声明此会话过期。而在客户端,如果经过t/3的时间未收到任何消息,客户端将向服务器发送心跳消息(心跳检测)。在经过2t/3的时间后,ZooKeeper客户端开始寻找其他服务器,也就是说还有t/3的时间找到连接会话。

在集群模式下,会话超时就会触发客户端重连,在重新连到新的服务器节点时,有个要求就是这个节点的ZooKeeper状态要和最后连接的服务器的ZooKeeper状态保持最新。ZooKeeper是通过服务中排序更新来决定状态是否最新。集群根据每一个更新建立的顺序来分配给事务标识符。

ZooKeeper远程连接超时排查与解决 在使用ZooKeeper时,我们遇到了连接超时的问题。通过仔细的排查和分析,我们发现问题的根源是客户端和服务端准备时间的不一致。通过调整客户端的连接超时时间,我们最终解决了问题。这个问题的排查过程虽然比较繁琐,但却让我们学到了很多有关ZooKeeper的知识。希望通过本篇博客,能够帮助到遇到类似问题的读者。如果有任何疑问或者建议,欢迎在评论区留言。 阅读详情

相关推荐

解决Yarn中任务信息存储过多导致任务失败的问题

问题现象 Hadoop集群的任务提交不上去,一直失败 集群资源未出现资源不足的情况 查看日志 RM出现zk相关报错 active的ResourceManager的日志报往zk存储任务状态的时候失败,等待调度器丢弃相关事件 2021-08-26 14:53:13 ERROR org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore:857 - State store operation failed java.io.IOExc

JacksonKing的专栏 4546

java连接zookeeper测试;连接外网zookeeper时超时(zookeeper not connected);超时时间设置timeout;application.yml引用前面定义的变量

【代码】java连接zookeeper测试 超时时间设置timeout。

tanzongbiao的专栏 3967

Zookeeper系列——3Zookeeper源码分析之Session管理及请求处理

理清Zookeeper的Session创建、刷新和过期流程分析明确Zookeeper的核心业务调用链。

Eclipse_2019的博客 913

笃行杂记之Zookeeper SessionTimeOut分析

0.前言 本文为笃行日常工作记录,烂笔头系列。 源码前面,了无秘密 — by 侯杰 近期的一个C++项目里使用了Zookeeper做服务发现,期间遇到了SessionTimeOut问题的困扰,明明通过zookeeper c client设置了超时时间,但无效。 请原谅我一开始对zookeeper不熟悉。最终通过分析源码了解到Session...

weixin_34044273的博客 766

Kafka配置文件中的Zookeeper参数

在Kafka的配置文件中,有一些与Zookeeper相关的参数可以进行调整,以满足不同的需求和环境。本文将详细介绍Kafka配置文件中与Zookeeper相关的参数,并提供相应的源代码示例。这个参数用于设置与Zookeeper会话的超时时间,即Kafka与Zookeeper之间的心跳检测间隔时间。如果你的Zookeeper集群在不同的主机上或使用了不同的端口,你需要相应地修改这个参数。这是最重要的Zookeeper参数之一,用于指定Kafka连接到的Zookeeper集群的地址。默认情况下,该参数的值是。

DeoSql的博客 801

华三模拟器实战:3分钟搞定路由器DHCP地址池配置(附常见错误排查)

本文提供华三模拟器中路由器DHCP地址池的实战配置指南。通过分步详解,帮助用户在3分钟内完成基础设置,并深入讲解多地址池、中继配置等进阶应用。文章重点剖析了DHCP服务无法工作的常见原因,提供从客户端到服务器的系统性排错方法,助力快速定位并解决地址分配失败、获取参数错误等典型问题。

w1x2y3的博客 360

ZooKeeper会话Session (秒懂+图解+史上最全)

那对于ZK的服务端来说,如何维护管理这些会话,就是本文要聊的内容啦~我们在服务器启动Zookeeper的时候能得知,ZK服务端对外默认端口是2181。而客户端连接到服务端上,其本质其实就是一个TCP连接(长连接) ,当连接正式建立起来的时候,就开起来该次会话的生命周期了。有了会话之后,后续的请求发送,回应,心跳检测等机制都是基于会话来实现的。关于 本文的技术问题, 请来尼恩 发起的Java 高并发疯狂创客圈社群交流 ,

架构师尼恩 2191

Open5GS实战指南:Ubuntu 22.04环境下的5G核心网快速部署

本文提供Open5GS在Ubuntu 22.04环境下部署5G核心网的实战指南,涵盖环境准备、MongoDB配置、核心组件安装、WebUI部署及网络调优等关键步骤。通过详细的安装教程和常见问题解决方案,帮助开发者快速搭建开源5G核心网测试环境。

weixin_29202213的博客 538

Zookeeper会话

会话(Session)是 ZooKeeper中最重要的概念之一,客户端与服务端之间的任何交互操作都与会话息息相关,这其中就包括临时节点的生命周期、客户端请求的顺序执行以及Watcher通知机制等。 ZooKeeper客户端与服务端之间一次会话创建的大体过程。以Java语言为例,简单地说, ZooKeeper的连接与会话就是客户端通过实例化ZooKeeper对象来实现客户端与服务器创建并保持TCP...

通往神秘的道路的专栏 627

comsol-声学

COMSOL多物理场仿真软件以高效的计算性能和杰出的多场耦合分析能力实现了精确的数值仿真,已被广泛应用于各个领域的科学研究以及工程计算,为工程界和科学界解决了复杂的多物理场建模问题。COMSOL内嵌的声学模块可以方便地进行多孔声学和粘热声学的模拟仿真。软件数值计算得到的云图,可以将声压、速度、声强以及声能耗散等结果可视化,十分有利于学生对声学的学习和理解。将COMSOL仿真引入实验当中,通过软件的可视化处理有效直观的展示复杂物理场和集合模型仿真的流程,与实验数据结合,使得文章内容具有说服力、预见性和新颖性。

y2715163545的博客 2376

如何从Matlab工作区读取数据,并按时序将数据输入Simulink中

如何从Matlab工作区读取数据,并按时序将数据输入Simulink中 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍

weixin_44899540的博客 1万+

[ZooKeeper]Client Session失效

前面一篇文章提到zookeeper server端主动发现session超时并清理session信息,关闭连接,接下来看看client端如何试图恢复session的。关于client端代码分析见前文http://iwinit.iteye.com/blog/1754611 。由于session被清理,此时server端已经没有session信息了。而由于连接被关闭,client会抛出异常 if ...

吊丝码农 2516

S参数反演法

等效介质理论模型— 利用S参数反演法提取超材料结构的等效参数 等效介质理论模型—利用S参数反演法提取超材料结构的等效参数 S参数反演法,即利用等效模型的传输矩阵和S参数求解超材料结构的等效折射率n和等效阻抗Z的过程。本文对等效介质理论模型进行了详细介绍,并提供对应代码。 超材料的传输矩阵 超材料结构的传输矩阵函数为: 其中,d 为等效光学活性材料的厚度,n 为折射率,Z 表示阻抗。 S参数和传输矩阵T 超材料结构的S参数和传输矩阵T满足下列方程: 利用以上两式,可以得到等效折射率n和相对阻抗的表达式

weixin_43962864的博客 1万+

ZooKeeper session管理

ZooKeeper的每个客户端都维护一组服务端信息,在创建连接时由应用指定,客户端随机选择一个服务端进行连接,连接成功后,服务端为每个连接分配一个唯一标识。客户端在创建连接时可以指定溢出时间,客户端会周期性的向服务端发送PING请求来保持连接,当客户端检测到与服务端断开连接后,客户端将自动选择服务端列表中的另一个服务端进行重连。客户端允许应用修改服务端列表,但修改可能导致客户端与服务端的重连。连接状

宁静致远 6619

[GXYCTF2019]BabyUpload1 -- .htaccess文件解析与蚁剑实战指南

本文深入解析了[GXYCTF2019]BabyUpload1文件上传漏洞的实战利用。通过绕过后缀名与内容检测,上传包含PHP代码的.jpg文件,并利用.htaccess文件强制服务器将其解析为PHP脚本。文章详细介绍了.htaccess的原理、构造方法、Content-Type绕过技巧,并演示了如何使用中国蚁剑连接Webshell获取Flag,为Web安全学习提供了完整实战指南。

weixin_29016315的博客 509

rk3588 rkaiq_3A_server 无法解析json文件记录

rk3588 rkaiq_3A_server 无法解析json文件记录

neardi_dev的博客 1万+

ZooKeeper会话的创建过程

会话创建过程中ZooKeeper客户端的工作流程   客户端一次会话创建的过程可以分为三个阶段:初始化阶段、会话创建阶段、响应处理阶段。 初始化阶段 1.初始化ZooKeeper对象   通过调用ZooKeeper的构造方法来实例化一个ZooKeeper对象,在初始化过程中,会创建一个客户端的Watcher管理器:ClientWatchManager。 2.设置会话默认Watcher   如果在构造方法中传入了一个Watcher对象,那么客户端会将这个对象作为默认Watcher保存在ClientWatchM

loser与你 382

手把手教你学Simulink——基于Simulink的蚁群算法路径规划仿真建模示例

路径规划是机器人导航系统中的核心任务之一,旨在为机器人找到一条安全且高效的路径,使其能够从起点到达目标点,同时避免与障碍物发生碰撞。在开始之前,需要定义工作环境(例如地图),包括起点、终点以及可能存在的障碍物位置。通过本指南,我们介绍了如何基于Simulink结合MATLAB实现蚁群算法的路径规划仿真建模。

MHD0815的博客 222

1. ZooKeeper Session 基本原理「第五章 ZooKeeper 原理」「架构之路ZooKeeper理论和实战」

相关历史文章(阅读本文前,您可能需要先看下之前的系列????) 国内最全的SpringBoot系列之四 享元模式:共享女友-第355篇 什么是ZooKeeper-第347篇 ZooKeeper安装-第348篇 ZooKeeper数据结构和实操-第349篇 ZooKeeper的watch机制-第350篇 ZooKeeper的acl权限控制-第351篇 ZooKeeper内存数据和持久化-第352篇 ZooKeeper集群搭建-第354篇 ZooK...

悟纤学院 7174

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

zookeeper会话

会话(Session)是ZooKeeper中最重要的概念之一,客户端和服务端之间的任何交互操作都与会话息息相关,这其中就包括临时节点的生命周期、客户端请求的顺序执行以及Watcher通知机制等。 1.会话状态 在ZooKeeper客户端和服务端成功完成连接创建后,就建立了一个会话。ZooKeeper会话在整个运行期间的声明周期中,会在不同的会话状态之间进行切换,这些状态一般可以分为CONNE...

LIEY 369

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

zookeeper session tracker机制分析

说到zookeeper session管理 ,免不了要问什么是session?session id/session是如何产生的?session 信息如何存储?本文以session tracker线程【详见SessionTrackerImpl】的运行机制作为主线,并尝试解答一些相关问题1)session基础在介绍session tracker线程之前先回答几个问题1.1) 什么是session?zo

pwlazy的专栏 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Zookeeper Session 深度解析

在分布式系统中,数据的一致性和服务的可靠性是至关重要的。假设我们正在开发一个分布式文件存储系统,系统中的多个节点需要协同工作,共同维护一个文件系统的元数据。在这个过程中,节点之间需要频繁地交换信息,以确保每个节点对文件系统的视图是一致的。然而,由于网络的不稳定性和节点可能出现的故障,节点与节点之间的通信可能会中断。为了解决这个问题,我们需要一个机制来确保节点在连接中断后能够重新建立连接,并且能够同步最新的状态信息。这就引出了Zookeeper中的Session概念。

JavaCodePro的博客 653

浅谈 Zookeeper 中的 Session 与 临时节点

→zookeeper version 3.6.1 一、临时节点 相信我们对 zookeeper 的临时节点都不陌生,与持久节点的最大区别就是会随着会话的消失而删除,这种特性常被用来作注册中心分布式锁等,下面来分析下临时节点的实现: 单机模式下由三个 processor 构成了整个处理链路 PrepRequestProcessor 主要负责请求的反序列化,串行化处理和权限校验等 SyncRequestProcessor 主要负责数据的持久...

qq_37490665的博客 3476
上一篇: 【并发编程】- 线程池执行任务乱序特性
下一篇: GitHub上stars 10000+的Java面试题(含解析)
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值