文档章节

[Curator] Shared Semaphore 的使用与分析

秋雨霏霏
 秋雨霏霏
发布于 2017/06/01 17:03
字数 518
阅读 49
收藏 0

Shared Semaphore

一个计数信号量,可以使用一把锁来限制进程进入的数量(租约)。每一个用户按请求顺序得到一份租约,基本上还是一个公平的过程。

有两种方式来控制信号量的最大租约数(max leases)。

  1. 用户直接设定某个path下最大租约数
    • 不可以对不同的处理任务进行单独限制数量
    • 所有的任务都使用一个公用的限制数
  2. 使用一个SharedCountReader来决定对于path下应该提供多少份租约
    • 可以为不同的执行任务分配不同的租约数量

对于获得到的租约,一定要妥善的关闭(例如,在finally块中调用close方法),否则,租约就会丢失(信号量可用数量不可逆的减少了)。

在客户端session失效时,链接持有的租约会自动关闭,其他客户端可以继续使用这份租约。

1. 关键 API

org.apache.curator.framework.recipes.locks.InterProcessSemaphoreV2

org.apache.curator.framework.recipes.locks.Lease

org.apache.curator.framework.recipes.shared.SharedCountReader

2. 机制说明

《Shared Lock 的使用与分析》中已经见识过InterProcessSemaphoreV2的使用了。

3. 用法

3.1 创建

3.1.1 直接设定maxLeases的方式

public InterProcessSemaphoreV2(CuratorFramework client,
                             String path,
                             int numberOfLeases)

3.1.2 使用SharedCountReader的方式

public InterProcessSemaphoreV2(CuratorFramework client,
                             String path,
                             SharedCountReader count)

3.2 使用

3.2.1 申请

提供了好几个acquire方法,可用于不同的场景:

  1. 阻塞式申请单个
public Lease acquire()
  1. 阻塞式批量申请
public Collection<Lease> acquire(int qty)
  1. 等待式申请单个
public Lease acquire(long time,
                     TimeUnit unit)
  1. 等待式批量申请
public Collection<Lease> acquire(int qty,
                               long time,
                               TimeUnit unit)

3.2.2 归还

  1. 批量归还
public void returnAll(Collection<Lease> leases)
  1. 单个归还
public void returnLease(Lease lease)

当然,也可以直接调用租约的关闭方法:Lease#close()

4. 错误处理

实际使用中,必须考虑链接问题。 强烈建议:添加一个ConnectionStateListener用以处理链接中断或者丢失的情况

5. 源码分析

参见《Shared Lock 的使用与分析》中,有关InterProcessSemaphoreV2的部分。

© 著作权归作者所有

共有 人打赏支持
秋雨霏霏
粉丝 150
博文 94
码字总数 168411
作品 0
杭州
CTO(技术副总裁)
私信 提问
Apache Curator 2.10.0 和 3.1.0 发布

Apache Curator 今天发布两个新版本,分别是 2.10.0 和 3.1.0 。 其中 2.10.0 改进内容: Bug [CURATOR-208] - InterProcessSemaphoreV2 swallows InterruptedException [CURATOR-209] - Ba......

红薯
2016/02/15
3.8K
0
Apache Curator 2.7.0 发布

Apache Curator 2.7.0 发布,此版本现已提供下载,二进制包提供在 Maven 库。更新内容请看这里: Bug 修复 [CURATOR-42] - Background guaranteed delete considers NoNode to be a failed ...

oschina
2014/11/04
2.5K
0
Apache Curator 3.0.0 发布,ZooKeeper 客户端简化

Apache Curator 3.0.0 发布,该版本带来的对 ZooKeeper 的新的动态配置 APIs 的兼容,更新内容如下: 子任务 [CURATOR-160] - Support Dynamic Reconfig [CURATOR-161] - Support Watcher R...

oschina
2015/10/15
1K
3
Apache Curator 2.4.2 发布

Apache Curator 就是为了简化 zookeeper客户端调用而生,利用它,可以更好的使用zookeeper。 Apache Curator 2.4.2 发布了,改进内容包括: Bug [CURATOR-74] - Documentation on InterProce...

oschina
2014/04/25
1K
0
Apache Curator 2.3.0 发布

Apache Curator 2.3.0 发布了,Apache Curator 就是为了简化zookeeper客户端调用而生,利用它,可以更好的使用zookeeper。 改进记录: Bug [CURATOR-8] - Possible mishandling of connecti...

oschina
2013/11/08
3.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

学习心得《稻盛和夫经营学》的读后感2300字

学习心得《稻盛和夫经营学》的读后感2300字: 作者:张宪军;稻盛和夫信奉明朝王阳明的一句话:良知没处,万法难度。人们把它理解为管理者要有在纯正心态下要有好的做事方法,不然是很难成功...

原创小博客
17分钟前
0
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
38分钟前
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
1
0
HashTable和Vector为什么逐渐被废弃

HashTable,不允许键值为null,还一个就是put方法使用sychronized方法进行线程同步,单线程无需同步,多线程可用concurren包的类型。 如编程思想里面说的作为工具类,封闭性做的不好没有一个...

noob_chr
昨天
1
0
Win10 下安装Win7双系统

很多人买了预装64位Win8/8.1的电脑后想重装(或者再安装一个)Win7系统,但是折腾半天发现以前的方法根本不奏效。这是因为预装Win8/8.1的电脑统一采用了UEFI+GPT引导模式,传统的BIOS(Legacy...

yaly
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部