@Component public class ZKLeaderLatch { private static CuratorFramework zkClient; private static LeaderLatch leaderLatch; public ZKLeaderLatch(@Value("${zkservers}")String servers, @Value("${masterkey}")String masterkey) { String connectString = servers; String masterKey = masterkey; try { final String zkid = String.format("zkLatchClient#%s", InetAddress.getLocalHost().getHostAddress()); CommonLogger.printInfo(this,"zk "+zkid+" client init... server:"+connectString+", masterKey:"+masterKey+""); RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); zkClient = CuratorFrameworkFactory.builder().connectString(connectString) .sessionTimeoutMs(6000).retryPolicy(retryPolicy).build(); CommonLogger.printInfo(this,"zk client start...."); zkClient.start(); leaderLatch = new LeaderLatch(zkClient, masterKey,zkid); LeaderLatchListener leaderLatchListener = new LeaderLatchListener() { @Override public void notLeader() { CommonLogger.printInfo(this,"client "+zkid+" is not main. "); } @Override public void isLeader() { CommonLogger.printInfo(this,"client "+zkid+" is main. YEAH!"); } }; leaderLatch.addListener(leaderLatchListener); CommonLogger.printInfo(this,"leaderLatch start...."); leaderLatch.start(); } catch(Exception e) { CommonLogger.printInfo(this,"client err. "+e.getMessage(),e); } } public boolean isLeader() { return leaderLatch.hasLeadership(); } public CuratorFramework getClient(){ return zkClient; } public LeaderLatch getLatch(){ return leaderLatch; } }
配置依赖 <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version>4.0.1</version> </dependency> <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
原文地址:https://www.cnblogs.com/liangmm/p/12024311.html
时间: 2024-10-18 11:59:13