web开发首选,CSS常用五类选择器
生产-消费者队列,用于多节点的分布式数据结构,生产和消费数据。生产者创建一个数据对象,并放到队列中;消费者从队列中取出一个数据对象并进行处理。在ZooKeeper中,队列可以使用一个容器节点下创建多个子节点来实现;创建子节点时,CreateMode使用 PERSISTENT_SEQUENTIAL,ZooKeeper会自动在节点名称后面添加唯一序列号。EPHEMERAL_SEQUENTIAL也有同样的特点,区别在于会话结束后是否会自动删除。
敲小黑板:*_SEQUENTIAL是ZooKeeper的一个很重要的特性,分布式锁、选举制度都依靠这个特性实现的。
1 对前续代码的重构
之前的文章,我们已经用实现了Watcher和Barrier,创建ZooKeeper连接的代码已经复制了一遍。后续还需要类似的工作,因此先对原有代码做一下重构,让代码味道干净一点。
以下是 process(WatchedEvent)的代码
final public void process(WatchedEvent event) {if (Event.EventType.None.equals(event.getType())) {// 连接状态发生变化if (Event.KeeperState.SyncConnected.equals(event.getState())) {// 连接建立成功connectedSemaphore.countDown();}} else if (Event.EventType.NodeCreated.equals(event.getType())) {processNodeCreated(event);} else if (Event.EventType.NodeDeleted.equals(event.getType())) {processNodeDeleted(event);} else if (Event.EventType.NodeDataChanged.equals(event.getType())) {processNodeDataChanged(event);} else if (Event.EventType.NodeChildrenChanged.equals(event.getType())) {processNodeChildrenChanged(event);}
}
以ZooKeeperBarrier为例,看看重构之后的构造函数和监听Event的代码
ZooKeeperBarrier(String address, String tableSerial, int tableCapacity, String customerName)throws IOException {super(address);this.tableSerial = createRootNode(tableSerial);this.tableCapacity = tableCapacity;this.customerName = customerName;
}
protected void processNodeChildrenChanged(WatchedEvent event) {log.info("{} 接收到了通知 : {}", customerName, event.getType());// 子节点有变化synchronized (mutex) {mutex.notify();}
}
2 队列的生产者
生产者的关键代码
String elementName = queueName + "/element";
ArrayList<ACL> ids = ZooDefs.Ids.OPEN_ACL_UNSAFE;
CreateMode createMode = CreateMode.PERSISTENT_SEQUENTIAL;
getZooKeeper().create(elementName, value, ids, createMode);
注意,重点是PERSISTENT_SEQUENTIAL,PERSISTENT是表示永久存储直到有命令删除,SEQUENTIAL表示自动在后面添加自增的唯一序列号。这样,尽管elementName都一样,但实际生成的zNode名字在 “element”后面会添加格式为%010d的10个数字,如0000000001。如一个完整的zNode名可能为/queue/element0000000021。
3 队列的消费者
消费者尝试从子节点列表获取zNode名最小的一个子节点,如果队列为空则等待
最后
由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙点赞+点击【学习资料】即可免费领取!
img-w206dpt0-1626950006218)]
[外链图片转存中…(img-VqexZh3C-1626950006220)]
web开发首选,CSS常用五类选择器相关推荐
- CSS常用五类选择器
要使用css对HTML页面中的元素实现一对一,一对多或者多对一的控制,这就需要用到CSS选择器. ㈠什么是选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/co ...
- CSS常用五类选择器,经典好文
前言 腾讯的面试凉了,接着开始面试网易 网易的面试体验挺不错.它的微信公众号会给你叫号,前台小姐姐也会提醒你,每一面结束后都可以找前台小姐姐查询面试结果.而且食堂超级好吃!还可以边吃饭边吸猫!面试地点 ...
- CSS常用伪类选择器详解
1. 用户行为伪类 1.1 :hover selector:hover 表示匹配鼠标经过的selector选择器元素. 应用场景: 鼠标经过元素时的样式变化,Tips提示,下拉列表和过渡动画等 细节优 ...
- Css 结构伪类选择器
目录 Css 结构伪类选择器 结构伪类-公式 Css 结构伪类选择器 在日常开发中,结构伪类选择器用的还是比较多的熟练的使用它,可以让我们的代码更整洁. 作用与优势: 作用:根据元素在HTML中的结构 ...
- 使用css伪类选择器,css的伪类选择器的使用
伪类选择器,在不同情况下显示的css,伪类选择器在处理页面的美观是很大帮助.其实很多美丽的按钮或者页面都是有这些基础的知识实现的,掌握好基础很重要. 名字 实例 说明 :link a:link 选择所 ...
- 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)...
了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编 赵静 译 ISBN 978-7-121-21769-2 2 ...
- html伪类选择器focus,了解CSS :focus-within伪类选择器
一.了解CSS :focus-within伪类选择器 CSS :focus-within伪类选择器和IE8就开始支持的:focus可以说是近亲,区别在于:focus表示当前元素处于focus状态时候干 ...
- web前端html+css常用布局05列表布局
web前端html+css常用布局05列表布局 注意:引入jquery的jquery-2.1.4.min.js包 图片从自己目录中路径. 代码: <!DOCTYPE html> <h ...
- Web前端,CSS常用之相对定位和绝对定位的区别,静态定位、子绝父相、固定定位、元素的层级关系的了解
前言 持续学习总结输出中,今天分享的是Web前端,CSS常用之相对定位和绝对定位的区别,静态定位.子绝父相.固定定位.元素的层级关系的了解 1.定位的基本介绍 我们的网页常见布局方式有:标准流.浮动. ...
最新文章
- matlab 非线性曲线拟合
- scip 练习2.18
- 轉Excel的一種簡單方法
- swift 去json空格_数字货币为什么要去中心化?好处是什么?
- android unity hid,Unity5.X与Arduino交互
- tf.train.Saver,和模型参数微调
- 安装配置MySQL5.7详细教程
- 微信小程序大家来找茬 ,快速通过方法
- 洞道干燥及计算机控制实验报告,洞道干燥实验思考题
- 利用STM32精确测量电压
- Android cer转bks
- latex如何设置页面边框
- MSP430单片机中断学习笔记(一)
- 2022 199管综真题及答案解析
- python数据框元素的性质_Pandas基础:文件读取与写入、Series和Dataframe、常用基本函数、排序...
- 改进的RANSAC算法实现点云粗配准
- 日语汉字上面标注平假名
- Transformer 实现 Kaggle 房价预测竞赛
- Unity3D将物体的所有子物体设置为半透明
- matlab中的且怎么表达,新人求问!MATLAB中如何实现编辑距离并求相似度,且遍历输出成矩...