`
buzhucele
  • 浏览: 334038 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

zookeeper 分布式容灾代码示例

    博客分类:
  • java
阅读更多
废话少说直接上代码!
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
分享到:
评论

相关推荐

    Apache ZooKeeper分布式环境搭建教程

    zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; zookeeper之分布式环境搭建:Apache ZooKeeper分布式环境搭建教程; ...

    深入解析ZooKeeper分布式环境搭建+编程知识+技术开发

    zookeeper之分布式环境搭建:深入解析ZooKeeper分布式环境搭建+编程知识+技术开发; zookeeper之分布式环境搭建:深入解析ZooKeeper分布式环境搭建+编程知识+技术开发; zookeeper之分布式环境搭建:深入解析...

    从Paxos到Zookeeper分布式一致性原理与实践PDF

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

    从Paxos到Zookeeper 分布式一致性原理与实践 倪超

    从Paxos到Zookeeper 分布式一致性原理与实践 倪超,完整版

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

    《ZooKeeper分布式过程协同技术详解》是一本深入解析ZooKeeper核心技术的书籍,适合所有对分布式系统和ZooKeeper有研究兴趣的读者。ZooKeeper是Apache软件基金会的一个开源项目,它为分布式应用程序提供了一个高效、...

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

    ### 分布式一致性原理与实践:从Paxos到Zookeeper #### 一、引言 随着互联网技术的发展,分布式系统已经成为现代软件架构的核心组成部分。在分布式系统中,多个节点协同工作来完成复杂的任务,而如何确保这些节点...

    从Paxos到Zookeeper 分布式一致性原理与实践 卷1

    从Paxos到Zookeeper 分布式一致性原理与实践

    springBoot+dubbo+zookeeper分布式微服务

    在这个项目中,文件名"springboot+zookeeper+dubbo"可能代表了项目的主要构成部分,包含了使用SpringBoot、Zookeeper和Dubbo的示例代码或配置文件。开发者可以通过研究这些文件,学习如何将这三个组件整合在一起,...

    zookeeper 分布式过程协同技术详解 pdf

    zookeeper 分布式过程协同技术详解 pdf

    Zookeeper双机房容灾方案.pdf

    Zookeeper双机房容灾方案是指在分布式系统中使用Zookeeper来实现高可用性和容灾的方案。本方案使用5个Zookeeper实例来实现高可用性和容灾。 Zookeeper选举机制是指Zookeeper集群中leader的选举机制。Zookeeper...

    从PAXOS到ZOOKEEPER分布式一致性

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

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

    ZooKeeper是Google的Chubby项目的开源实现,它曾经作为Hadoop的 ⼦项目,在⼤数据领域得到⼴泛应用。

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

    《ZooKeeper:分布式过程协同技术详解》这本书深入剖析了ZooKeeper这一强大的分布式协调服务。ZooKeeper是由Apache Hadoop项目开发的开源组件,它为分布式应用提供了一个高效、可靠的分布式协调解决方案。在分布式...

    dubbo+zookeeper分布式服务

    【标题】:“Dubbo + ZooKeeper 分布式服务” 【内容】: 在现代软件开发中,分布式服务架构已经成为大型系统设计的重要组成部分。Dubbo 和 ZooKeeper 是两种在分布式环境中广泛使用的开源工具,它们分别承担了...

    从Paxos到Zookeeper 分布式一致性原理与实践 [倪超著]第一部分

    从Paxos到Zookeeper 分布式一致性原理与实践 [倪超著] 文件太大 分为两部分 这是第一部分

    Zookeeper 分布式过程.pdf

    Apache ZooKeeper是一个开源的分布式协调服务,它主要用来协调分布式应用中那些相对独立的服务。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,为用户程序提供简单易用的接口。本书...

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

    **分布式锁的概念与重要性** 在分布式系统中,由于多台服务器之间可能存在数据不一致的情况,因此需要一种机制来确保在并发...理解并熟练掌握Zookeeper的分布式锁机制,对于构建高可用、高性能的分布式系统至关重要。

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

    Zookeeper是Apache Hadoop生态体系中的一个重要组成部分,作为一个分布式协调服务,它在处理分布式环境中的数据管理和一致性问题上发挥着核心作用。Zookeeper-3.4.13是该服务的一个稳定版本,提供了多种关键功能,以...

    zookeeper分布式进程协同.pdf

    【Zookeeper:分布式进程协同】 Zookeeper是一款广泛应用于互联网行业的分布式协调服务,它为分布式应用程序提供了高可用性、一致性以及顺序访问控制等关键特性。在没有Zookeeper的世界中,分布式系统的构建将面临...

Global site tag (gtag.js) - Google Analytics