zookeeper 分布式barrier

分布式barrier可在分布式环境中控制进程同步

*************************

相关类

DistributrdBarrier

public class DistributedBarrier {*******************************
构造方法public DistributedBarrier(CuratorFramework client, String barrierPath) {*******************************
常用方法public synchronized void setBarrier() throws Exception {public synchronized void removeBarrier() throws Exception {public synchronized void waitOnBarrier() throws Exception {public synchronized boolean waitOnBarrier(long maxWait, TimeUnit unit) throws Exception { 

DistributedDoubleBarrier

public class DistributedDoubleBarrier {****************************
构造方法public DistributedDoubleBarrier(CuratorFramework client, String barrierPath, int memberQty) {******************************
常用方法public void enter() throws Exception {  //一直等待,满足条件后继续执行public boolean enter(long maxWait, TimeUnit unit) throws Exception {//最长等待maxWait后继续执行public synchronized void leave() throws Exception {//一直阻塞,满足条件后离开public synchronized boolean leave(long maxWait, TimeUnit unit) throws Exception {//最长到时间自动离开

*************************

使用示例  DistributedBarrier

*********************

config 层

@Configuration
public class ZookeeperConfig {@Value("${zookeeper.connecting-string}")private String connectingString;@Beanpublic CuratorFramework initCuratorFramework(){CuratorFramework curatorFramework= CuratorFrameworkFactory.builder().connectString(connectingString).sessionTimeoutMs(5000).retryPolicy(new ExponentialBackoffRetry(1000,3,3000)).namespace("test").build();curatorFramework.start();return curatorFramework;}
}

********************

controller 层

@RestController
public class HelloController {@Autowiredprivate CuratorFramework curatorFramework;private String barrierPath="/barrier";@RequestMapping("/get2")public String test(){DistributedBarrier barrier=new DistributedBarrier(curatorFramework,barrierPath);ExecutorService executorService=Executors.newFixedThreadPool(5);for(int i=0;i<5;i++){executorService.submit(()->{try{barrier.setBarrier();System.out.println(Thread.currentThread().getId()+" 设置barrier: "+System.currentTimeMillis());Thread.sleep(1000);barrier.waitOnBarrier();System.out.println(Thread.currentThread().getId()+" 在barrier上等待: "+System.currentTimeMillis());}catch (Exception e){e.printStackTrace();}});}try{Thread.sleep(2000);System.out.println(Thread.currentThread().getId()+" 移除barrier: "+System.currentTimeMillis());barrier.removeBarrier();}catch (Exception e){e.printStackTrace();}return "success";}
}

****************

控制台输出

40 设置barrier: 1569199694093
42 设置barrier: 1569199694098
44 设置barrier: 1569199694101
43 设置barrier: 1569199694106
41 设置barrier: 1569199694107
26 移除barrier: 1569199696082
40 在barrier上等待: 1569199696096
41 在barrier上等待: 1569199696098
43 在barrier上等待: 1569199696100
44 在barrier上等待: 1569199696104
42 在barrier上等待: 1569199696107

*************************

使用示例 DistriburedDoubleBarrier

********************

config 层

@Configuration
public class ZookeeperConfig {@Value("${zookeeper.connecting-string}")private String connectingString;@Beanpublic CuratorFramework initCuratorFramework(){CuratorFramework curatorFramework= CuratorFrameworkFactory.builder().connectString(connectingString).sessionTimeoutMs(5000).retryPolicy(new ExponentialBackoffRetry(1000,3,3000)).namespace("test").build();curatorFramework.start();return curatorFramework;}
}

********************

controller 层

@RestController
public class HelloController {@Autowiredprivate CuratorFramework curatorFramework;private String doubleBarrier="/doubleBarrier";@RequestMapping("/get3")public String test2(){ExecutorService executorService=Executors.newFixedThreadPool(5);for(int i=0;i<5;i++){executorService.submit(()->{DistributedDoubleBarrier barrier=new DistributedDoubleBarrier(curatorFramework,doubleBarrier,5);try{System.out.println(Thread.currentThread().getId()+" 即将进入barrier:"+System.currentTimeMillis());barrier.enter();Thread.sleep(2000);System.out.println(Thread.currentThread().getId()+" 进入barrier: "+System.currentTimeMillis());}catch (Exception e){e.printStackTrace();}finally {try{Thread.sleep(2000);barrier.leave();System.out.println(Thread.currentThread().getId()+" 退出barrier: "+System.currentTimeMillis());}catch (Exception e){e.printStackTrace();}}});}return "success";}
}

****************

控制台输出

40 即将进入barrier:1569199586907
44 即将进入barrier:1569199586907
42 即将进入barrier:1569199586907
43 即将进入barrier:1569199586907
41 即将进入barrier:1569199586908
41 进入barrier: 1569199588969
40 进入barrier: 1569199588969
43 进入barrier: 1569199588969
42 进入barrier: 1569199588969
44 进入barrier: 1569199588969
41 退出barrier: 1569199591023
40 退出barrier: 1569199591027
42 退出barrier: 1569199591027
44 退出barrier: 1569199591027
43 退出barrier: 1569199591027

zookeeper 分布式barrier相关推荐

  1. zookeeper 分布式计数器

    分布式计数器的思路是:指定一个Zookeeper数据节点作为计数器,多个应用实例在分布式锁的控制下,通过更新该数据节点的内容来实现计数功能. Curator中封装了实现,例如 DistributedA ...

  2. Zookeeper分布式一致性原理(七):Curator客户端

    1. Curator简介 Curator是Netfix公司开源的一套Zookeeper客户端.Curator解决了很多Zookeeper客户端非常底层的细节开发工作,包括重连.反复注册Watcher和 ...

  3. 《从Paxos到zookeeper分布式一致性原理与实践》笔记

    <从Paxos到zookeeper分布式一致性原理与实践>笔记 文章目录 <从Paxos到zookeeper分布式一致性原理与实践>笔记 一.概念 二.一致性协调 2.1 2P ...

  4. 《从Paxos到zookeeper分布式一致性原理与实践》

    <从Paxos到zookeeper分布式一致性原理与实践> 一.概念 ACID: Automaticy.consistency.isolation. Durability CAP: con ...

  5. (五)springmvc+mybatis+dubbo+zookeeper分布式架构 整合 - maven构建根项目

    上一篇我们介绍<springmvc+mybatis+dubbo+zookeeper分布式架构 整合 - maven模块规划>,从今天开始,我们将对代码的每一个构建做详细的记录,能够帮助大家 ...

  6. zookeeper 分布式过程协同技术详解.pdf_阿里大牛耗时18个月整理这份ZooKeeper分布式详解文档...

    前言 摩尔定律揭示了集成电路每18个月计算性能就会增加一倍.随着信息的飞速膨胀,很多应用都无法依赖单个服务器的性能升级来处理如此庞大的数据量,分布式系统和应用越来越受到人们的青睐.分布式系统和应用不仅 ...

  7. [转载] zookeeper 分布式锁服务

    转载自http://www.cnblogs.com/shanyou/archive/2012/09/22/2697818.html 分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那 ...

  8. zookeeper 分布式锁原理

    zookeeper 分布式锁原理: 1 大家也许都很熟悉了多个线程或者多个进程间的共享锁的实现方式了,但是在分布式场景中我们会面临多个Server之间的锁的问题,实现的复杂度比较高.利用基于googl ...

  9. Zookeeper分布式一致性原理(四):Zookeeper简介

    zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.master选举.分布式锁和分布式队列等.Zook ...

最新文章

  1. nginx php站点配置文件,php网站修改默认访问文件的nginx配置
  2. 部分 II. Network
  3. exit函数的头文件问题
  4. win10下处理“xxx不是内部或外部命令,也不是可运行的程序或批处理文件”
  5. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170404
  6. MyEclipse 8.0 GA 初体验
  7. [Algorithm]一切始于ADT-表达式计算
  8. php自动打印小票_服装店专用小票机自带进销存
  9. cad2010多个文件并排显示_并排查看Excel工作表只需1个小动作,工作效率大涨百倍!...
  10. 天津计算机本科学校有哪些专业吗,天津哪些大学有人工智能专业
  11. java 通过System.getProperties()获取系统参数
  12. 曲线积分和曲面积分及其几何应用、物理应用
  13. python打印索引序号_打印带有索引的矩阵python
  14. C++句柄类(智能指针)小结
  15. 多测师_设置 Linux 支持中文
  16. 【Java实现PDF文件转换为图片】
  17. Android实战技巧之三十四:用TableLayout伪装表格显示数据
  18. 什 么 是 勒 索 病 毒 ?
  19. web展示爬去知乎、微博文章和图片
  20. AMD锐龙7 7745HX和i9-12900HX选哪个 r77745HX和i912900HX对比

热门文章

  1. 行驶证识别/行驶证ocr识别了解详细信息
  2. 服装行业采购商城系统平台采购招标透明化,提高采购管理水平
  3. 国际手机号码正则表达式
  4. 成为以太坊开源项目EthereumJ的维护者
  5. 计算机应用基础的题库,计算机应用基础题库
  6. 中小企业存储集群系统建设方案
  7. TED | 深度拖延症患者的自白(附视频演讲稿)
  8. 第三方风控的窘境:赚钱不易,生存更难
  9. Python的自我修炼之路(一)
  10. 友盟社会化Android组件之第三方登录