原创
配置中心代码:
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.data.Stat;
public class ConfigCenter implements Watcher{
private ZooKeeper zk = null;
private CountDownLatch connectedSemaphore = new CountDownLatch( 1 );
public void createConnection( String connectString, int sessionTimeout ) {
try {
zk = new ZooKeeper( connectString, sessionTimeout, this );
connectedSemaphore.await();
} catch ( InterruptedException e ) {
System.out.println( "连接创建失败,发生 InterruptedException" );
e.printStackTrace();
} catch ( IOException e ) {
System.out.println( "连接创建失败,发生 IOException" );
e.printStackTrace();
}
}
public void process(WatchedEvent event) {
System.out.println( "configcenter 收到事件通知:" + event.getState() +"\n" );
if ( KeeperState.SyncConnected == event.getState() ) {
connectedSemaphore.countDown();
}
}
void updateConfig(String znode,String str) {
try {
Stat s = this.zk.exists(znode, true);
this.zk.setData(znode, str.getBytes(), s.getVersion());
byte[] value = this.zk.getData(znode, null, new Stat());
String res = new String(value);
System.out.println("res ="+res);
} catch (Exception e) {
e.printStackTrace();
}
}
}
监听客户端代码:
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.KeeperState;
public class ZooKeeperWatcher implements Watcher ,Runnable{
private ZooKeeper zk = null;
private CountDownLatch connectedSemaphore = new CountDownLatch( 1 );
public void createConnection( String connectString, int sessionTimeout ) {
// this.releaseConnection();
try {
zk = new ZooKeeper( connectString, sessionTimeout, this );
connectedSemaphore.await();
} catch ( InterruptedException e ) {
System.out.println( "连接创建失败,发生 InterruptedException" );
e.printStackTrace();
} catch ( IOException e ) {
System.out.println( "连接创建失败,发生 IOException" );
e.printStackTrace();
}
}
public void process(WatchedEvent event) {
System.out.println( "zookeeperwatcher 收到事件通知:" + event.getState() +"\n" );
try {
zk.exists("/conf2", true);////不知道为什么一定要加上这句话,下次事件到来时,才会触发process事件
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
if ( KeeperState.SyncConnected == event.getState() ) {
connectedSemaphore.countDown();
}
}
public void run() {
try {
synchronized (this) {
while (true) {
wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试代码:
import java.io.IOException;
import org.apache.zookeeper.KeeperException;
public class test {
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
try{
ZooKeeperWatcher zw1 = new ZooKeeperWatcher();
zw1.createConnection("192.168.26.141:2181", 1000);
ZooKeeperWatcher zw2 = new ZooKeeperWatcher();
zw2.createConnection("192.168.26.141:2182", 1000);
new Thread(zw1).start();
new Thread(zw2).start();
ConfigCenter cc = new ConfigCenter();
cc.createConnection("192.168.26.141:2181", 1000);
cc.updateConfig("/conf2","a");
cc.updateConfig("/conf2","b");
cc.updateConfig("/conf2","c");
cc.updateConfig("/conf2","d");
}catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
《从Paxos到Zookeeper分布式一致性原理与实践》是一本深入探讨分布式系统一致性问题的著作,其中重点讲解了Paxos算法与Zookeeper在实际应用中的理论与实践。Paxos是分布式计算领域中著名的共识算法,为解决分布式...
《从PAXOS到ZOOKEEPER分布式一致性原理与实践》这本书深入探讨了分布式系统中的一个重要议题——一致性。一致性是确保分布式系统中各个节点数据同步的关键,它在高可用、高性能的分布式服务中扮演着核心角色。PAXOS...
它提供了一套完整的工具和服务,帮助开发者解决分布式应用程序中的常见问题,如命名服务、配置管理、集群管理等。Zookeeper的设计基于一个简单的层次化命名空间模型,并采用了高效的复制协议来实现数据的一致性和高...
这种设计使得ZooKeeper能有效地处理命名服务、配置管理、集群同步、分布式锁等场景。在实际应用中,ZooKeeper常用于构建分布式服务框架,如Hadoop、HBase、Kafka等。 本书首先会介绍ZooKeeper的基本概念和架构,...
《从Paxos到Zookeeper分布式一致性原理与实践》与《ZooKeeper-分布式过程协同技术详解》这两本书深入探讨了分布式系统中的一个重要概念——一致性,以及如何通过ZooKeeper这一工具来实现高效的分布式协同。...
Zookeeper基于Paxos和其他一致性算法的实现,为分布式应用程序提供了命名服务、配置管理、分布式锁、群组服务等功能。Zookeeper通过ZNode(类似于文件系统的节点)来存储和操作数据,并采用观察者模式来实时监控数据...
本项目"springBoot+dubbo+zookeeper分布式微服务"充分利用了这三个组件的优势,构建了一个高效、可扩展且易于维护的服务网络。以下是对这些技术及其整合应用的详细说明: **SpringBoot** SpringBoot是Spring框架的...
在分布式系统中,数据一致性、命名服务、配置管理、集群管理等任务常常变得复杂且难以处理,而ZooKeeper则通过提供一系列简单的原语来帮助解决这些问题。 1. **ZooKeeper的基本概念** - **节点(ZNode)**:...
《从PAXOS到ZOOKEEPER分布式一致性》是一份深度探讨分布式系统一致性问题的资料,其中涵盖了PAXOS算法的基础理论以及ZOOKEEPER在实际应用中的实践。分布式一致性是构建大规模、高可用系统的关键技术,对于理解和解决...
整体而言,《ZooKeeper:分布式过程协同技术详解》为读者提供了一个全面的ZooKeeper学习和使用指南,不仅涵盖了ZooKeeper的基础知识和API使用,还深入到其内部机制和集群管理的层面,使读者能够全面掌握ZooKeeper的...
总之,Zookeeper是分布式应用程序的重要工具,它通过提供配置管理、名字服务、分布式同步和组服务等功能,有效地解决了分布式环境中的许多挑战。对于理解和使用Zookeeper-3.4.13,开发者需要深入学习其API、设计模式...
Zookeeper提供了一种类似于文件系统的数据模型,可以用于命名服务、配置管理、集群管理、分布式锁等场景。它具有强一致性、高可用性和高性能的特点,是实现分布式锁的理想选择。 **Zookeeper的分布式锁实现原理** ...
ZOOKEEPER基于PAXOS和其他一致性算法,实现了包括命名服务、配置管理、组服务、分布式锁和分布式同步等功能。书中可能详细介绍了ZOOKEEPER的架构设计,包括客户端-服务器模型、ZNode数据模型、Watcher机制、会话和...
Zookeeper的主要使命是作为分布式环境中的一个中心化服务,用于管理、协调和监控各个分散的节点。它并不负责存储大量用户数据,而是专注于维护分布式系统中的元数据,如配置信息、命名服务、组服务、分布式同步等。...
ZooKeeper作为基于PAXOS的分布式协调服务,提供了命名服务、配置管理、组服务、分布式同步和分发目录树等功能。它简化了分布式应用的开发,因为开发者不需要从头实现一致性算法。ZooKeeper的数据模型是一个层次化的...
书中详细介绍了如何配置和使用ZooKeeper,包括创建、删除、更新ZNode,设置和触发watch事件,以及如何利用ZooKeeper进行服务发现、分布式锁、配置管理等实践应用。此外,还涵盖了ZooKeeper的故障恢复机制、监控与...