1、功能:
实现多进程,或多线程争抢zookeeper锁,例如4个进程,程序名:DLframe,进程名:DLframe_10001,去争抢任务锁:10001。只会有一个进程争抢到锁10001,其余经常在等待获取锁,也可以用于单进程去争抢多个任务。
在192.168.1.25 部署4个进程
去争取10001锁,最终只会有一个进程争抢到。争取到效果如图:
2、使用方法AppName:是进程名
PrgName:是程序名
TaskId:是任务锁标识
appIns:是进程数(默认配置1,)
以下完整代码:
package com.asap.test; import com.asap.lock.LostCallBack; import com.asap.lock.ReconnectCallBack; import com.asap.lock.SuspendCallBack; import com.asap.dl.plugin.logmgr.Log; import com.asap.dl.plugin.logmgr.LogFactory; import com.asap.sri.ccp.zk.ZkConstant; import com.asap.sri.ccp.zk.constant.Constants; import com.asap.sri.ccp.zk.exception.ZkException; import com.asap.sri.ccp.zk.exception.ZkLockException; import com.asap.sri.ccp.zk.impl.ZkMgrImpl; import com.asap.sri.ccp.zk.lock.ProcessLock; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Properties; public class Test { private static final Log LOG = LogFactory.getLogger(Test.class); static String key = "test123"; static int cnt=100; static class MyThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub try { ProcessLock.doGetResource(true); System.out.println(Thread.currentThread().getName() +":"+Thread.currentThread().getId() +":release"); } catch (Exception e) { System.out.println(e); } } } private static String zk = "192.168.1.25:2184"; private static void initZK() throws ZkException, ZkLockException { Constants.getAllTaskIdList().add("10001"); Constants.setPrgName("DLframe"); Constants.setAppName("DLframe_10001"); Constants.setAppIns(1); Constants.setZkScheme("digest"); Constants.setZkAuth("admin1:admin1"); Constants.setZkMgr(new ZkMgrImpl(zk, 50000, ZkConstant.POLICY_RETRY_MORE)); // 添加网络中断回调函数,需要自己实现以下三个接口。 Constants.getZkMgr().suspendNotify(new SuspendCallBack()); Constants.getZkMgr().lostedNotify(new LostCallBack()); Constants.getZkMgr().reconnectedNotify(new ReconnectCallBack()); } public static void main(String[] args) throws Exception { //初始化zk initZK(); // 争抢锁,没有争抢到在里面一直循环等待 ProcessLock.doGetResource(true); //争抢到锁的进程.. while (true) { LOG.warn("getLock...."); System.out.println("Now all thread done!"); Thread.sleep(1000); } } }3、程序架构
源码:Zookeeper: 基于Curatorframework实现zookeeper分布式锁,实现任务争抢,程序高可用方案。 - Gitee.com
要源码请联系我:qq:1053714778或私信我
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)