1、新建一个SpringBoot项目
pom.xml中添加以下jar包引用
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
2、LeaderLatchTest.java
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.leader.LeaderLatch;
import org.apache.curator.framework.recipes.leader.LeaderLatchListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.utils.CloseableUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
public class LeaderLatchTest {
static String LOCK_PATH = "/leader_latch";
public static void main(String[] args) throws Exception{
CuratorFramework client = getZkClient();
//LeaderLatch leaderLatch = new LeaderLatch(client, LOCK_PATH, "CLIENT_TEST");
LeaderLatch leaderLatch = new LeaderLatch(client, LOCK_PATH);
ZkJobLeaderLatchListener listener = new ZkJobLeaderLatchListener();
leaderLatch.addListener(listener);
leaderLatch.start();
Thread.sleep(5000);
if (leaderLatch.hasLeadership()) {
System.out.println("------close----------begin----");
leaderLatch.close();
System.out.println("------close----------end----");
}
Thread.sleep(5000);
}
private static CuratorFramework getZkClient() {
String zkServerAddress = "192.168.1.12:2181";
ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3, 5000);
CuratorFramework zkClient = CuratorFrameworkFactory.builder()
.connectString(zkServerAddress)
.sessionTimeoutMs(5000)
.connectionTimeoutMs(5000)
.retryPolicy(retryPolicy)
.build();
zkClient.start();
return zkClient;
}
static class ZkJobLeaderLatchListener implements LeaderLatchListener {
public void isLeader() {
System.out.println("成为leader:");
}
public void notLeader() {
System.out.println("不是leader:");
}
}
}
3、在idea中启动两个LeaderLatchTest