zk保证定时任务集群部署时单个节点执行
Posted liangmingming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zk保证定时任务集群部署时单个节点执行相关的知识,希望对你有一定的参考价值。
@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>
以上是关于zk保证定时任务集群部署时单个节点执行的主要内容,如果未能解决你的问题,请参考以下文章