成人午夜一区二区_操碰在线视频_国产精品麻豆一区二区三区_中文黄色一级片_欧美日本中文字幕_高清视频91

當前位置: 首頁 / 技術(shù)干貨 / 正文
分布式鎖的實現(xiàn)(一)

2023-01-12

   節(jié)點

  4.1. 父類的設(shè)計

  設(shè)計父類,提供連接ZooKeeper服務端的邏輯、節(jié)點操作的邏輯,所有方式實現(xiàn)的鎖都需要繼承自這個類。

  package com.qianfeng.lock;

  import org.apache.zookeeper.*;

  import org.apache.zookeeper.data.Stat;

  import java.io.IOException;

  import java.util.concurrent.CountDownLatch;

  /**

  * @author 千鋒大數(shù)據(jù)教研院 - 章魚哥

  * @company 北京千鋒互聯(lián)科技有限公司

  */

  public abstract class ZkLockerBase implements Watcher {

  /**

  * 操作的鎖名稱

  */

  protected String lockName;

  /**

  * ZooKeeper連接客戶端

  */

  private ZooKeeper zkCli = null;

  /**

  * 確保可以連接到ZooKeeper客戶端

  */

  private final CountDownLatch latch = new CountDownLatch(1);

  /**

  * 鎖的根節(jié)點名稱

  */

  protected String rootNodeName = "/zk-lock";

  /**

  * 連接到預設(shè)的服務器

  */

  public ZkLockerBase() {

  this("qianfeng01:2181,qianfeng02:2181,qianfeng03:2181");

  }

  /**

  * 連接到ZooKeeper的指定服務端

  * @param connectString 連接字符串

  */

  public ZkLockerBase(String connectString) {

  try {

  // 連接到ZooKeeper服務端

  this.zkCli = new ZooKeeper(connectString, 5000, this);

  // 等待連接成功的信號

  this.latch.await();

  // 創(chuàng)建根節(jié)點

  createRootNode();

  } catch (IOException | InterruptedException e) {

  e.printStackTrace();

  }

  }

  public ZkLockerBase(String connectString, String lockName) {

  this(connectString);

  this.lockName = lockName;

  }

  /**

  * 創(chuàng)建節(jié)點

  * @param nodeName 創(chuàng)建的節(jié)點名稱

  * @param createMode 創(chuàng)建模式

  * @return 創(chuàng)建成功的節(jié)點名稱,如果創(chuàng)建失敗,返回null

  */

  public String createNode(String nodeName, CreateMode createMode) {

  try {

  // 創(chuàng)建節(jié)點,并返回創(chuàng)建成功之后的節(jié)點名稱

  return this.zkCli.create(nodeName, "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, createMode);

  } catch (KeeperException | InterruptedException ignored) {

  }

  return null;

  }

  /**

  * 刪除節(jié)點

  * @param nodeName 刪除的節(jié)點名稱

  * @return 刪除的結(jié)果

  */

  public boolean deleteNode(String nodeName) {

  try {

  // 刪除節(jié)點

  this.zkCli.delete(nodeName, -1);

  return true;

  } catch (InterruptedException | KeeperException ignored) {

  }

  return false;

  }

  /**

  * 判斷節(jié)點是否存在

  * @param nodeName 節(jié)點的名字

  * @return 是否存在

  */

  public boolean exists(String nodeName) {

  try {

  Stat exists = zkCli.exists(nodeName, false);

  return exists != null;

  } catch (KeeperException | InterruptedException e) {

  e.printStackTrace();

  }

  return false;

  }

  /**

  * 創(chuàng)建根節(jié)點,存放所有的節(jié)點或者子節(jié)點實現(xiàn)的鎖

  */

  public void createRootNode() {

  if (!exists(this.rootNodeName)) {

  createNode(this.rootNodeName, CreateMode.CONTAINER);

  }

  }

  public String getLockName() {

  return this.rootNodeName + "/" + lockName;

  }

  public ZooKeeper getZkCli() {

  return zkCli;

  }

  @Override

  public void process(WatchedEvent event) {

  switch (event.getType()) {

  case None:

  if (event.getState().equals(Event.KeeperState.SyncConnected)) {

  // 說明連接到服務端成功

  this.latch.countDown();

  }

  case NodeCreated:

  processCreatedNode(event);

  break;

  case NodeDeleted:

  processDeleteNode(event);

  break;

  case NodeChildrenChanged:

  processChildernChange(event);

  break;

  }

  }

  // 創(chuàng)建節(jié)點回調(diào)

  protected void processCreatedNode(WatchedEvent event) {}

  // 刪除節(jié)點回調(diào)

  protected void processDeleteNode(WatchedEvent event) {}

  // 子節(jié)點變更回調(diào)

  protected void processChildernChange(WatchedEvent event) {}

  }

  鎖接口的設(shè)計

  提供所有的鎖必須要實現(xiàn)的功能,制定鎖的規(guī)范。

  package com.qianfeng.lock;

  /**

  * ZooKeeper分布式鎖通用接口

  *

  * @author 千鋒大數(shù)據(jù)教研院 - 章魚哥

  * @company 北京千鋒互聯(lián)科技有限公司

  */

  public interface ZkLocker {

  /**

  * 上鎖

  */

  boolean lock();

  /**

  * 解鎖

  */

  boolean unlock();

  /**

  * 判斷鎖是否存在

  * @return 是否存在

  */

  boolean exists();

  }

  4.3. 節(jié)點實現(xiàn)的非阻塞性鎖

  package com.qianfeng.lock.nodeLock;

  import com.qianfeng.lock.ZkLocker;

  import com.qianfeng.lock.ZkLockerBase;

  import org.apache.zookeeper.CreateMode;

  /**

  * @author 千鋒大數(shù)據(jù)教研院 - 章魚哥

  * @company 北京千鋒互聯(lián)科技有限公司

  */

  public class ZkLockerNodeNoneBlockingLocker extends ZkLockerBase implements ZkLocker {

  public ZkLockerNodeNoneBlockingLocker(String connectString, String lockName) {

  super(connectString, lockName);

  }

  public ZkLockerNodeNoneBlockingLocker(String lockName) {

  super();

  this.lockName = lockName;

  }

  /**

  * 上鎖

  */

  @Override

  public boolean lock() {

  // 1. 拼接完整的節(jié)點路徑

  String lockNode = this.rootNodeName + "/" + lockName;

  // 2. 創(chuàng)建鎖

  return createNode(lockNode, CreateMode.EPHEMERAL) != null;

  }

  /**

  * 解鎖

  */

  @Override

  public boolean unlock() {

  // 1. 拼接完整的節(jié)點路徑

  String lockNode = this.rootNodeName + "/" + lockName;

  // 2. 刪除鎖

  return deleteNode(lockNode);

  }

  /**

  * 判斷鎖是否存在

  *

  * @return 是否存在

  */

  @Override

  public boolean exists() {

  // 1. 拼接完整的節(jié)點路徑

  String lockNode = this.rootNodeName + "/" + lockName;

  // 2. 判斷是否存在

  return super.exists(lockNode);

  }

  }

好程序員公眾號

  • · 剖析行業(yè)發(fā)展趨勢
  • · 匯聚企業(yè)項目源碼

好程序員開班動態(tài)

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數(shù)據(jù)+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發(fā) <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數(shù)據(jù)分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發(fā) <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓IT培訓
在線咨詢
IT培訓IT培訓
試聽
IT培訓IT培訓
入學教程
IT培訓IT培訓
立即報名
IT培訓

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號-5 京公網(wǎng)安備 11010802035720號

主站蜘蛛池模板: 啪啪av大全导航福利综合导航 | www.99re| 少妇精品亚洲一区二区成人 | 毛片在线免费播放 | 国产剧情在线观看一区 | 国产在线观看www | 精品国产乱码久久久久久丨区2区 | 国产精品2018 | 国产精彩视频 | 久久精品中文 | 日韩精品一区二区三区电影在线看 | 激情婷婷| 久久精品日韩 | 久久免费av | 少妇性色午夜淫片aaa播放 | 天天爱综合 | h视频网 | 精品毛片 | 亚洲成av人片在线观看无码 | 精品国产乱码久久久久久久 | a视频在线| 国产精品不卡 | 夜夜性 | 国产亚洲精品久久 | 日本一二三区视频 | 久久综合久久久 | 亚洲国产91 | a级毛片免费网站 | 激情影院免费观看 | 精品国产凹凸成av人导航 | 2015成人永久免费视频 | 日韩在线观看中文字幕 | 成人精品免费视频 | 亚洲色图欧洲色图 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 国产精品久久久久婷婷二区次 | 91精品国产综合久 | 伊人久久在线 | 91久久精品国产 | 92久久 | 最近中文字幕大全 |