所需jar包
zookeeper-3.4.6.jar
curator-client-4.3.0.jar
curator-framework-4.3.0.jar
curator-recipes-4.3.0.jar
DistributedZkLockUtils连接工具类
package com.app.util.curator; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.locks.InterProcessMutex; import org.apache.curator.retry.ExponentialBackoffRetry; import com.app.common.utils.PropertiesUtil; /** * @ClassName: DistributedZkLockUtils * @Description:TODO(zk-curator开源客户端工具类) * @author: wd * @date: 2020年9月27日 上午10:50:37 */ public class DistributedZkLockUtils { private final CuratorFramework client; private final static DistributedZkLockUtils dzl = new DistributedZkLockUtils(); //静态工厂方法 public final static DistributedZkLockUtils getInstace(){ System.out.println("获取DistributedZkLockUtils:::::"+dzl); return DistributedZkLockUtils.dzl; } public DistributedZkLockUtils() { System.out.println("初始化DistributedZkLockUtils:::::开始"); client=CuratorFrameworkFactory.newClient(PropertiesUtil.getPropertiesVal("/serviceconfig.properties", "zookeeper.address"),5000,100000,new ExponentialBackoffRetry(2000, 2)); client.start(); System.out.println("初始化DistributedZkLockUtils:::::完成:client="+client); } //获取锁 public InterProcessMutex acquire(String lockPath) throws Exception { InterProcessMutex ipm = new InterProcessMutex(client, lockPath); ipm.acquire(); System.out.println("curator-----获取锁"); return ipm; } //释放锁 public void release(InterProcessMutex ipm,String lockPath) throws Exception { if (ipm.isAcquiredInThisProcess()) { ipm.release(); } System.out.println("curator-----释放锁"); } }
使用
InterProcessMutex ipm=null; try { //获取锁未成功,则在此处阻塞,并且对当前路径下最大的节点进行watch监听 ipm=DistributedZkLockUtils.getInstace().acquire("/curator-lock/regipNum"); //业务逻辑处理代码 } catch (Exception e) { e.printStackTrace(); try { DistributedZkLockUtils.getInstace().release(ipm,"/curator-lock/regipNum"); } catch (Exception e2) { e2.printStackTrace(); System.out.println("--regip---:释放锁失败"); } }finally { try { DistributedZkLockUtils.getInstace().release(ipm,"/curator-lock/regipNum"); } catch (Exception e2) { e2.printStackTrace(); System.out.println("--regip---:释放锁失败"); } }