余瑜的博客 余瑜的博客
首页
  • 并发
  • 线程池
  • spring
  • maven
  • 其他
  • redis
  • mysql
  • linux
  • zookeeper
  • docker
  • terminal
  • kong插件开发
  • 资料
  • leetCode-简单
  • blog
  • 其他
关于
GitHub (opens new window)
首页
  • 并发
  • 线程池
  • spring
  • maven
  • 其他
  • redis
  • mysql
  • linux
  • zookeeper
  • docker
  • terminal
  • kong插件开发
  • 资料
  • leetCode-简单
  • blog
  • 其他
关于
GitHub (opens new window)
  • 并发

  • 线程池

  • spring

  • maven

  • 其他

    • io流
    • innoDB存储引擎
    • 并发4:懒汉模式与枚举模式
    • 自定义redis锁注解
    • 自定义zkLock
      • 前言
      • 目标
      • 思路
        • 锁主体逻辑
        • 锁超时策略
        • 类扫描问题
      • 结语
    • 记一次去除Result处理
    • TCP粘包半包
    • ELK统一日志解决方案
    • 深入理解BIO、NIO、AIO线程模型
  • JAVA
  • 其他
余瑜
2020-11-27
目录

自定义zkLock

# 前言

由于公司的代码不方便分享, 本篇只提供大致思路

Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”给Curator予高度评价。本篇主要使用到curator中的InterProcessMutex类进行加锁解锁操作, InterProcessMutex 具体原理及使用方法请自行百度

# 目标

  1. 提供注解及内部类两种方式进行加锁
  2. 两种加锁方式内部实现保持一致, 尽可能使用同一套代码, 方便后期维护
  3. 注解方式支持sel表达式
  4. 内部类方式采用类似于TransactionTemplate 方式注入后进行使用
  5. 尽可能支持多种锁类型(公平锁, 读写锁), 默认为公平锁
  6. 支持自定义加锁超时策略, 并提供默认超时策略
  7. 该代码为框架代码, 需保持导入简单, 最好进行maven引用后, 只需要配置zk链接地址就可以正常使用

# 思路

# 锁主体逻辑

通过源码可知读写锁的实现是对 InterProcessMutex 的子类, 具体的加锁解锁方法和公平锁是一致的,

InterProcessMutex fair = new InterProcessMutex(client, FAIR_ROOT_PATH + lockValue);
InterProcessMutex read = new InterProcessReadWriteLock(client, READ_WRITE_ROOT_PATH + lockValue).readLock();
InterProcessMutex write = new InterProcessReadWriteLock(client, READ_WRITE_ROOT_PATH + lockValue).writeLock();	
1
2
3

我们可以将加锁解锁的方法都写在抽象类中AbsLock , 通过子类来实现InterProcessMutex 的初始化, 同时加入工厂模式, 依据传入的枚举类型来确定锁的前缀及锁类型, 这样在注解及内部类都可以调用AbsLock来进行加锁解锁

# 锁超时策略

锁超时策略可以通过接口方式传入内部类执行器中, 具体的策略可以保证自定义

# 类扫描问题

把需要扫描的类配置到 src/main/resources/META-INF/spring.factories 文件中, 使项目引用后可以直接扫描到

# 结语

其实整体实现很简单, 但是还是有很多的细节在里面, 整体写完后会对自己框架设计上有很大的启发

上次更新: 2021/06/04, 16:31:43

← 自定义redis锁注解 记一次去除Result处理→

Theme by Vdoing | Copyright © 2018-2022 逆光世间 | 备案号: 京ICP备19016086号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式