`
乡里伢崽
  • 浏览: 111865 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Zookeeper 分布式配置管理

阅读更多
原创

配置中心代码:

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分布式一致性原理与实践PDF

    《从Paxos到Zookeeper分布式一致性原理与实践》是一本深入探讨分布式系统一致性问题的著作,其中重点讲解了Paxos算法与Zookeeper在实际应用中的理论与实践。Paxos是分布式计算领域中著名的共识算法,为解决分布式...

    从PAXOS到ZOOKEEPER分布式一致性原理与实践

    《从PAXOS到ZOOKEEPER分布式一致性原理与实践》这本书深入探讨了分布式系统中的一个重要议题——一致性。一致性是确保分布式系统中各个节点数据同步的关键,它在高可用、高性能的分布式服务中扮演着核心角色。PAXOS...

    从Paxos到Zookeeper 分布式一致性原理与实践 PDF电子书下载 带目录书签 完整版.pdf

    它提供了一套完整的工具和服务,帮助开发者解决分布式应用程序中的常见问题,如命名服务、配置管理、集群管理等。Zookeeper的设计基于一个简单的层次化命名空间模型,并采用了高效的复制协议来实现数据的一致性和高...

    ZooKeeper分布式过程协同技术详解_new.pdf

    这种设计使得ZooKeeper能有效地处理命名服务、配置管理、集群同步、分布式锁等场景。在实际应用中,ZooKeeper常用于构建分布式服务框架,如Hadoop、HBase、Kafka等。 本书首先会介绍ZooKeeper的基本概念和架构,...

    从Paxos到Zookeeper分布式一致性原理与实践 + ZooKeeper-分布式过程协同技术详解 pdf

    《从Paxos到Zookeeper分布式一致性原理与实践》与《ZooKeeper-分布式过程协同技术详解》这两本书深入探讨了分布式系统中的一个重要概念——一致性,以及如何通过ZooKeeper这一工具来实现高效的分布式协同。...

    从Paxos到Zookeeper分布式一致性原理与实践包括源码

    Zookeeper基于Paxos和其他一致性算法的实现,为分布式应用程序提供了命名服务、配置管理、分布式锁、群组服务等功能。Zookeeper通过ZNode(类似于文件系统的节点)来存储和操作数据,并采用观察者模式来实时监控数据...

    springBoot+dubbo+zookeeper分布式微服务

    本项目"springBoot+dubbo+zookeeper分布式微服务"充分利用了这三个组件的优势,构建了一个高效、可扩展且易于维护的服务网络。以下是对这些技术及其整合应用的详细说明: **SpringBoot** SpringBoot是Spring框架的...

    ZooKeeper分布式过程协同技术详解

    在分布式系统中,数据一致性、命名服务、配置管理、集群管理等任务常常变得复杂且难以处理,而ZooKeeper则通过提供一系列简单的原语来帮助解决这些问题。 1. **ZooKeeper的基本概念** - **节点(ZNode)**:...

    从PAXOS到ZOOKEEPER分布式一致性

    《从PAXOS到ZOOKEEPER分布式一致性》是一份深度探讨分布式系统一致性问题的资料,其中涵盖了PAXOS算法的基础理论以及ZOOKEEPER在实际应用中的实践。分布式一致性是构建大规模、高可用系统的关键技术,对于理解和解决...

    Zookeeper 分布式过程.pdf

    整体而言,《ZooKeeper:分布式过程协同技术详解》为读者提供了一个全面的ZooKeeper学习和使用指南,不仅涵盖了ZooKeeper的基础知识和API使用,还深入到其内部机制和集群管理的层面,使读者能够全面掌握ZooKeeper的...

    Zookeeper分布式应用程序协调服务:zookeeper-3.4.13

    总之,Zookeeper是分布式应用程序的重要工具,它通过提供配置管理、名字服务、分布式同步和组服务等功能,有效地解决了分布式环境中的许多挑战。对于理解和使用Zookeeper-3.4.13,开发者需要深入学习其API、设计模式...

    zookeeper分布式锁实现和客户端简单实现

    Zookeeper提供了一种类似于文件系统的数据模型,可以用于命名服务、配置管理、集群管理、分布式锁等场景。它具有强一致性、高可用性和高性能的特点,是实现分布式锁的理想选择。 **Zookeeper的分布式锁实现原理** ...

    从PAXOS到ZOOKEEPER分布式一致性原理与实践 源码

    ZOOKEEPER基于PAXOS和其他一致性算法,实现了包括命名服务、配置管理、组服务、分布式锁和分布式同步等功能。书中可能详细介绍了ZOOKEEPER的架构设计,包括客户端-服务器模型、ZNode数据模型、Watcher机制、会话和...

    zookeeper分布式进程协同.pdf

    Zookeeper的主要使命是作为分布式环境中的一个中心化服务,用于管理、协调和监控各个分散的节点。它并不负责存储大量用户数据,而是专注于维护分布式系统中的元数据,如配置信息、命名服务、组服务、分布式同步等。...

    《从PAXOS到ZOOKEEPER分布式一致性原理与实践》高清版(带书签)

    ZooKeeper作为基于PAXOS的分布式协调服务,提供了命名服务、配置管理、组服务、分布式同步和分发目录树等功能。它简化了分布式应用的开发,因为开发者不需要从头实现一致性算法。ZooKeeper的数据模型是一个层次化的...

    PAXOS到ZOOKEEPER分布式一致性原理与实践带目录详细版

    书中详细介绍了如何配置和使用ZooKeeper,包括创建、删除、更新ZNode,设置和触发watch事件,以及如何利用ZooKeeper进行服务发现、分布式锁、配置管理等实践应用。此外,还涵盖了ZooKeeper的故障恢复机制、监控与...

Global site tag (gtag.js) - Google Analytics