依赖Zookeeper生成全局唯一序列号


  下面2张图来自:http://www.open-open.com/doc/view/2e0a82e0081d489dace301a2c512053c

  

  关于Zookeeper服务安装,配置,启动, 客户端操作参见:

  http://aiilive.blog.51cto.com/1925756/1684451

  http://aiilive.blog.51cto.com/1925756/1684145


1.利用Zookeeper的znode数据版本生成序列号

wKioL1XS7Crg6_YaAAQNPtfUuYg724.jpg


 利用zkClient封装包操作实现:

//提前创建好存储Seq的"/createSeq"结点 CreateMode.PERSISTENT
public static final String SEQ_ZNODE = "/seq"//通过znode数据版本实现分布式seq生成
public static class Task1 implements Runnable {private final String taskName;public Task1(String taskName) {this.taskName = taskName;}@Overridepublic void run() {ZkClient zkClient = new ZkClient("192.168.88.153:2181", 3000, 1000);Stat stat = zkClient.writeData(SEQ_ZNODE, new byte[0], -1);int versionAsSeq = stat.getVersion();System.out.println(taskName + " obtain seq=" + versionAsSeq);zkClient.close();}
}//main
final ExecutorService service = Executors.newFixedThreadPool(20);for (int i = 0; i < 20; i++) {service.execute(new Task1("[Concurrent-" + i + "]"));
}


2.利用临时带序列号的znode实现和分布式锁持久化znode实现


2.1 下图是利用分布式锁持久化znode实现


客户端采用apache curator 框架,代码:https://code.csdn.net/snippets/929300


wKioL1XS7CrzHIyFAAQ4t7a79_I242.jpg


 2.2利用临时带序列号的znode实现

 客户端采用:zkClient (https://github.com/adyliu/zkclient)


//提前创建好锁对象的结点"/lock" CreateMode.PERSISTENT
public static final String LOCK_ZNODE = "/lock";


//分布式锁实现分布式seq生成
public static class Task2 implements Runnable, IZkChildListener {private final String taskName;private final ZkClient zkClient;private final String lockPrefix = "/loc";private final String selfZnode;public Task2(String taskName) {this.taskName = taskName;zkClient = new ZkClient("192.168.88.153:2181", 30000, 10000);selfZnode = zkClient.createEphemeralSequential(LOCK_ZNODE + lockPrefix, new byte[0]);}@Overridepublic void run() {zkClient.subscribeChildChanges(LOCK_ZNODE, this);do {} while (zkClient.isConnected());}private void createSeq() {Stat stat = new Stat();byte[] oldData = zkClient.readData(LOCK_ZNODE, stat);byte[] newData = update(oldData);zkClient.writeData(LOCK_ZNODE, newData);System.out.println(taskName + selfZnode + " obtain seq=" + new String(newData));}private byte[] update(byte[] currentData) {String s = new String(currentData);int d = Integer.parseInt(s);d = d + 1;s = String.valueOf(d);return s.getBytes();}@Overridepublic void handleChildChange(String parentPath, List<String> currentChildren) throws Exception {String[] childrensZnode = currentChildren.toArray(new String[currentChildren.size()]);Arrays.sort(childrensZnode);String minZnode = LOCK_ZNODE + "/" + childrensZnode[0];if (selfZnode.equals(minZnode)) {createSeq();zkClient.unsubscribeChildChanges(LOCK_ZNODE, this);zkClient.delete(selfZnode);zkClient.close();}}
}


 完整代码参见:https://code.csdn.net/snippets/929320

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小眼睛有多惨?美颜都懒得救你......

1 眼睛小的人系统一般会自动识别为没睁开▼2 你想笑死我吧&#xff1f;&#xff1f;&#xff1f;▼3 大家都是狗&#xff0c;凭什么&#xff1f;&#xff1f;&#xff1f;▼4 这鱼是怎么跳上来的&#xff1f;▼5 感觉有被冒犯到▼6 这个车贴太可爱了&#xff01;▼7 君子…

软件开发了10年,迷茫了

在新疆做了10年软件开发&#xff0c;从asp开始不断学习&#xff0c;每出现一个新技术自己都会夜以继日的学习&#xff0c;总以为这个技术会是潮流&#xff0c;会持续几年&#xff0c;但结果是不到两年就已经落伍。身边的人慢慢的离开了软件开发队伍&#xff0c;终于2年前自己也…

jmeter聚个报告怎么看qps_Jmeter 使用笔记之 html 报告扩展(一)

题记&#xff1a;在用 loadrunner 的时候可以生成一个 HTML 的报告&#xff0c;并且里面包含各种图表&#xff0c;各种详细的数据。而在使用 Jmeter 测试完后并不能直接生成 Html 的报告(无论是用 GUI 还是命令行启动)。经过查找资料发现 Jmeter 的 extras 目录下有生成 HTML 的…

.NET网站国际化策略

我所在的公司是做SAAS软件&#xff0c;用户群体是面向全球的&#xff0c;因此对应业务系统国际化就是顺理成章的事情。其实国际化重点在于多语言支持&#xff0c;本文就从这方面入手。多语言如上解决方案截图&#xff0c;BQoolCommon.Resource是多语言资源工程&#xff0c;下面…

将数字转化为液晶显示屏的样子

发一个很蛋疼的程序&#xff0c;将一个数字转化为液晶显示屏显示的样子&#xff1a;第一个输入是尺寸&#xff0c;第二输入是要转化的数字&#xff0c;当两个参数都为0的时候结束输入&#xff1a; #include<iostream> using namespace std;struct Print{int size;int num…

计算机标准符合,计算机专利申请要符合哪些标准

需要具体分析&#xff0c;例如&#xff0c;外观专利申请流程&#xff1a;&#xff11;、外观设计专利申请受理阶段专利局收到专利申请后进行审查&#xff0c;如果符合受理条件&#xff0c;专利局将确定申请日&#xff0c;给予申请号&#xff0c;并且核实过文件清单后&#xff0…

史上最强电池!三位诺贝尔奖获奖者研究了大半辈子,却坦言还是没看懂?

全世界只有3.14 % 的人关注了爆炸吧知识手机患了忧郁症电量总剩1%晚上十点半了&#xff0c;还剩10%的电量&#xff0c;等我用完这些电就睡觉..5%了&#xff0c;这个推文看完应该就没电了1%了&#xff0c;算了再看一个&#xff0c;还没关机呢看完了&#xff0c;还是1%&#xff0…

libgdx 学习笔记七 libgdx应用程序生命周期

简介 本章内容描述libGDX 应用程序的结构和怎么根据不同的平台版本使用不同的后台 The Application 做为任意libGDX 工程的主入口点。Application 决定平台的版本和后台图形。Application 接口提供了合适的方法来访问Graphics, Audio, Input and File I/O模块。也提供了跨平台的…

工业相机与民用相机的区别_工业相机和普通相机的区别详解

在机器视觉迅猛发展的今天&#xff0c;工业相机作为机器视觉的核心组件已得到广泛应用&#xff0c;但是很多初学者还是搞不清楚究竟工业相机与普通相机有什么区别。下面小编就带大家一起去看看工业相机和普通相机的区别吧&#xff01;工业相机一、工业相机和普通相机的区别之性…

50个Android应用!Win11支持运行了

文 | 局长出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;Android 应用现已支持在 Windows 11 上运行。微软今日宣布&#xff0c;美国地区 Windows 11 Beta 通道的预览版已支持运行 Android 应用。正如公告所说&#xff0c;如需体验在 Windows 11 上运行…

javascript规范以及设计原则

UI layer的分离 针对CSS: 尽量不要在JS中的添加过多的动态CSS&#xff0c;可以考虑使用addClass 针对JS中的事件&#xff1a; Keep JavaScript Out of HTML 避免以下的代码 <!-- Bad --><button οnclick"doSomething()" id"action-btn">Click…

服务器的类型及作用是什么,按用途分类,服务器有哪些? - 问答库

问题&#xff1a;[问答题] 按用途分类&#xff0c;服务器有哪些&#xff1f;某工程包含两个单项工程&#xff0c;分别发包给甲、乙两个承包商。在施工中发生如下事件。事件一&#xff1a;该工程签约时的计算工程价款为1000万元&#xff0c;该工程固定要素的系数为0.2&#xff1…

删除

【题目描述】 现在&#xff0c;我的 上有 n 个数字&#xff0c;分别是 a1; a2; a3; :::; an。 我现在需要删除其中的 k 个数字。当然我不希望随随便便删除&#xff0c;我希望删除 k 数字之后&#xff0c;剩下的 n k 个数中有最多的不同的数 【输入格式】 第 两个正整数 n 和 …

你发现了吗?数学还能这么美

全世界只有3.14 % 的人关注了爆炸吧知识变身吧傅里叶&#xff01;不&#xff0c;不是变成夜礼服。图片作者&#xff1a;LucasVB和某些公然嘲笑应用的数学家不同&#xff0c;傅里叶特别重视应用领域&#xff0c;而他的傅里叶变换也不负众望成了工程和物理领域里最重要的数学公式…

clickhouse建库_ClickHouse高性能数据库

前面的文章ClickHouse之初步认识已经简单的介绍了ClickHouse&#xff0c;接下来进行简单的性能测试。测试数据来源于美国民用航班的数据&#xff0c;从1987年到2017年&#xff0c;有1.7亿条。环境&#xff1a;centos 6.3&#xff0c;32G内存&#xff0c;24核下载脚本&#xff1…

SingnalR 开发到生产部署闭坑指南

前天倒腾了一份[SignalR在react/go技术栈的实践01SignalR默认要协商传输方式SignalR 默认要求协商传输方式[1]不管是.NET客户端还是JavaScript客户端&#xff0c;构建连接时都存在一个默认配置&#xff1a;SkipNegotiationfasle&#xff0c;负负得正就等于要求协商&#xff0c;…

DB2 pureScale在线备份恢复实例1

刚刚接触DB2&#xff0c;对DB2的备份恢复机制不是太熟悉&#xff0c;相关的资料又太少&#xff0c;只好自己慢慢摸索了。 需求 对生产库进行在线压缩备份&#xff0c;备份中包含归档日志&#xff0c;定期将生产库备份恢复到测试环境&#xff0c;确保测试环境采用最新的生产数据…

华为服务器参数配置文件,最实用的华为配置基础手册.doc

经过Console 口登录应用环境用户需要经过Console 口登录到S-switch&#xff0c;图1-1 所表示。图1-1 经过Console 口登录到S-switch说明假如S-switch 是第一次上电&#xff0c;而且用户需要管理和配置S-switch&#xff0c;则用户只能经过Console 口登录到S-switch。背景信息在经…

Hibernate统计表中的条数

&#xfeff;&#xfeff;/** * 判断积分日志表中是否有某个用户的注册日志 */Transactional(propagation Propagation.REQUIRED)public boolean isExistRegPointLog(int userId, UserAction addReg) { try { String hql "select count(pl) from PointLog pl WHERE pl.…

SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践

SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践前言:自从上一篇文章发出之后&#xff0c;收到了很朋友的关注。很多朋友要求多多实践&#xff0c;而不是纯粹的理论。确实&#xff0c;从打算出这个系列开始&#xff0c;我就本着实践的思想来进行的&#xff01…