废话少说直接上代码!
import java.net.InetAddress;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
public class ClusterTest {
static ZooKeeper zk = null;
static Map<String, Watcher> myWatchMap = new HashMap<String, Watcher>();
static String ip = null;
public static void init() throws InterruptedException {
for(int i = 1; i < 6; i++){
final int k = i;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// 创建一个与服务器的连接
try {
ZooKeeper zk = new ZooKeeper(
"localhost:2181,localhost:2182", 1000, null);
String path = ip+k;
if(zk.exists(path, false) == null){
zk.create(path, "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL);
}
Thread.sleep(1000);
zk.close();
} catch (Exception e) {
// e.printStackTrace();
}
}
});
t.start();
t.setName("RISHENG-THREAD-"+i);
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
InetAddress addr = InetAddress.getLocalHost();
ip="/zookeeper/"+addr.getHostAddress();
// 创建一个与服务器的连接
zk = new ZooKeeper("localhost:2181,localhost:2182",
1000, null);
List<String> nodeList = zk.getChildren("/zookeeper", false);
System.err.println(nodeList);
init();
regWatch();
while(true){
Thread.sleep(1000);
init();
regWatch();
}
}
public static void regWatch() throws KeeperException, InterruptedException{
for(int i = 1; i < 6; i++){
String path = ip+i;
Watcher watch = null;
if(!myWatchMap.containsKey(path)){
watch = new MyWatch(zk, path);
myWatchMap.put(path, watch);
}
zk.exists(path, watch);
}
}
}
class MyWatch implements Watcher{
private ZooKeeper zk = null;
private String path = null;
public MyWatch(ZooKeeper zk, String path){
this.zk = zk;
this.path = path;
}
@Override
public void process(WatchedEvent event) {
if(EventType.NodeDeleted.equals(event.getType())){
System.err.println(event.getPath()+"====服务关闭===="+path);
} else if(EventType.NodeCreated.equals(event.getType())){
System.out.println(event.getPath()+"====服务开启===="+path);
}
try {
zk.exists(event.getPath(), this);
} catch (KeeperException e) {
} catch (InterruptedException e) {
}
}
}
另外有几点需要关注:
1、如果重复的new新的Watcher会导致订阅端重复收到通知;
2、zk的Watcher是一次性消费,用完后记得重新注册;
3、zk不保证通知关系始终简历,所以需要轮询注册Watcher
分享到:
相关推荐
从Paxos到Zookeeper分布式一致性原理与实践.pdf从Paxos到Zookeeper分布式一致性原理与实践.pdf从Paxos到Zookeeper分布式一致性原理与实践.pdf从Paxos到Zookeeper分布式一致性原理与实践.pdf从Paxos到Zookeeper分布式...
zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; ...
zookeeper之分布式环境搭建:深入解析ZooKeeper分布式环境搭建+编程知识+技术开发; zookeeper之分布式环境搭建:深入解析ZooKeeper分布式环境搭建+编程知识+技术开发; zookeeper之分布式环境搭建:深入解析...
《从Paxos到Zookeeper分布式一致性原理与实践》是一本深入探讨分布式系统一致性问题的著作,其中重点讲解了Paxos算法与Zookeeper在实际应用中的理论与实践。Paxos是分布式计算领域中著名的共识算法,为解决分布式...
《从PAXOS到ZOOKEEPER分布式一致性原理与实践》这本书深入探讨了分布式系统中的一个重要议题——一致性。一致性是确保分布式系统中各个节点数据同步的关键,它在高可用、高性能的分布式服务中扮演着核心角色。PAXOS...
### 分布式一致性原理与实践:从Paxos到Zookeeper #### 一、引言 随着互联网技术的发展,分布式系统已经成为现代软件架构的核心组成部分。在分布式系统中,多个节点协同工作来完成复杂的任务,而如何确保这些节点...
从Paxos到Zookeeper 分布式一致性原理与实践 倪超,完整版
《从Paxos到Zookeeper分布式一致性原理与实践》与《ZooKeeper-分布式过程协同技术详解》这两本书深入探讨了分布式系统中的一个重要概念——一致性,以及如何通过ZooKeeper这一工具来实现高效的分布式协同。...
《ZooKeeper分布式过程协同技术详解》是一本深入解析ZooKeeper核心技术的书籍,适合所有对分布式系统和ZooKeeper有研究兴趣的读者。ZooKeeper是Apache软件基金会的一个开源项目,它为分布式应用程序提供了一个高效、...
《从Paxos到Zookeeper:分布式一致性原理与实践》这本书深入浅出地探讨了分布式系统中的一个重要概念——一致性,以及如何在实际操作中通过Paxos算法和Zookeeper实现这一概念。分布式一致性是分布式系统设计的核心,...
从Paxos到Zookeeper 分布式一致性原理与实践
在这个项目中,文件名"springboot+zookeeper+dubbo"可能代表了项目的主要构成部分,包含了使用SpringBoot、Zookeeper和Dubbo的示例代码或配置文件。开发者可以通过研究这些文件,学习如何将这三个组件整合在一起,...
zookeeper 分布式过程协同技术详解 pdf
《从PAXOS到ZOOKEEPER分布式一致性》是一份深度探讨分布式系统一致性问题的资料,其中涵盖了PAXOS算法的基础理论以及ZOOKEEPER在实际应用中的实践。分布式一致性是构建大规模、高可用系统的关键技术,对于理解和解决...
ZooKeeper是Google的Chubby项目的开源实现,它曾经作为Hadoop的 ⼦项目,在⼤数据领域得到⼴泛应用。