Curator包 基于zookeeper实现共享可重入锁InterProcessMutex,已避开羊群效应

所需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---:释放锁失败");
			}
		}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值