用 ZooKeeper 同步集群配置,当需要修改所有节点配置时,将配置更新到 ZooKeeper 的一个节点,引起这个节点数据发生变化,

其他所有需要同步配置的节点上的本地 Watcher 会立即发现节点状态的变化,并将最新数据更新到本地

官方Demo 改了改,响应 Watcher 时用 ConfFileUtil 更新一下本地配置就可以了

  1. public class Executor implements Watcher, Runnable,
  2. DataMonitor.DataMonitorListener {
  3. String znode;
  4. DataMonitor dm;
  5. ZooKeeper zk;
  6. String filename;
  7. public Executor(String hostPort, String znode, String filename)
  8. throws KeeperException, IOException {
  9. this.filename = filename;
  10. zk = new ZooKeeper(hostPort, 3000, this);
  11. dm = new DataMonitor(zk, znode, this);
  12. }
  13. public static void main(String[] args) {
  14. args = new String[3];
  15. args[0] = Constant.ZKPEER;
  16. args[1] = Constant.ZNODE;
  17. args[2] = "";
  18. String hostPort = args[0];
  19. String znode = args[1];
  20. String filename = args[2];
  21. try {
  22. new Executor(hostPort, znode, filename).run();
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. public void process(WatchedEvent event) {
  28. dm.process(event);
  29. }
  30. public void run() {
  31. try {
  32. synchronized (this) {
  33. while (!dm.dead) {
  34. wait();
  35. }
  36. }
  37. } catch (InterruptedException e) {
  38. }
  39. }
  40. public void closing(int rc) {
  41. synchronized (this) {
  42. notifyAll();
  43. }
  44. }
  45. /**
  46. * 处理数据
  47. */
  48. public void exists(byte[] data) {
  49. System.out.println("...Invoked:Executor.exists(byte[] data)...");
  50. ConfFileUtil.sync(data);
  51. }
  52. }

上面的 Executor 用来和 znode 建立和维护连接

DataMonitor 仍旧负责接收事件 处理结果,这个类基本没改。

触发 Watcher 时, DataMonitor 委托 Executor 来更新本地配置

完整代码见 GITHUB

更新节点时需注意一点

  1. zk.setData(Constant.ZNODE, bytes, -1, null, null);

这个 byte[] 是有大小限制的,并且如果它超过了限制,ZooKeeper 也不会告诉你,官方文档说的是 1M,这个我没测试

当更新数据不成功且没有任何异常时,就需要检查这个数组是不是太长了

使用 ZooKeeper 同步集群配置的更多相关文章

  1. Zookeeper的集群配置和Java测试程序

    Zookeeper是Apache下的项目之一,倾向于对大型应用的协同维护管理工作.IBM则给出了IBM对ZooKeeper的认知: Zookeeper 分布式服务框架是 Apache Hadoop 的 ...

  2. Zookeeper的集群配置和Java测试程序 (一)

    概述 Zookeeper是Apache下的项目之一,倾向于对大型应用的协同维护管理工作.IBM则给出了IBM对ZooKeeper的认知: Zookeeper 分布式服务框架是 Apache Hadoo ...

  3. dubbo+zookeeper伪集群配置

    zookeeper作为注册中心,服务器和客户端都要访问,如果有大量的并发,肯定会有等待.所以可以通过zookeeper集群解决. 一.为什么需要zookeeper呢? 大部分分布式应用需要一个主控.协 ...

  4. java 学习笔记(五) Zookeeper的集群配置和Java测试程序

    参考博客 http://blog.csdn.net/catoop/article/details/50848555 http://blog.csdn.net/randompeople/article/ ...

  5. java架构之路-(分布式zookeeper)zookeeper集群配置和选举机制详解

    上次博客我们说了一下zookeeper的配置文件,以及命令的使用https://www.cnblogs.com/cxiaocai/p/11597465.html.我们这次来说一下我们的zookeepe ...

  6. Zookeeper+Kafka集群部署(转)

    Zookeeper+Kafka集群部署 主机规划: 10.200.3.85  Kafka+ZooKeeper 10.200.3.86  Kafka+ZooKeeper 10.200.3.87  Kaf ...

  7. Zookeeper+Kafka集群部署

    Zookeeper+Kafka集群部署 主机规划: 10.200.3.85  Kafka+ZooKeeper 10.200.3.86  Kafka+ZooKeeper 10.200.3.87  Kaf ...

  8. Kafka集群配置---Windows版

    Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,Kafka对消息进行保存时是通过tipic进行分组的.今天我们仅实现Kafka集群的配置.理论的抽空在聊 前言 最近研究kafka,发现网上很多 ...

  9. zookeeper集群配置与启动

    摘要:Zookeeper是一个很好的集群管理工具,被大量用于分布式计算.如Hadoop以及Storm系统中.这里简单记录下Zookeeper集群环境的搭建过程.本文以Ubuntu 12.04 LTS作 ...

随机推荐

  1. Java盲点:双重检查锁定及单例模式

    尊重原创: http://gstarwd.iteye.com/blog/692937 2004 年 5 月 01 日 所有的编程语言都有一些共用的习语.了解和使用一些习语很有用,程序员们花费宝贵的时间 ...

  2. uva 489 Hangman Judge(水题)

    题目:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&am ...

  3. 在Linux上运行C#

    众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x.ME.NT.2000.XP和Win CE之类的操作系统.但是,现在却有了一个叫做Mono的项目,它的目 ...

  4. 【转】Android中removeCallbacks失效原因

    原文网址:http://blog.sina.com.cn/s/blog_6714fba70100wtx1.html 在Android开发中会使用Handle的removeCallbacks函数,该函数 ...

  5. 【原】cocos2d-x开发笔记:多点触控

    在项目开发中,我们做的大地图,一个手指头按下滑动可以拖动大地图,两个手指头按下张开或者闭合,可以放大和缩小地图 在实现这个功能的时候,需要使用到cocos2d-x的多点触控功能. 多点触控事件,并不是 ...

  6. ARM Linux 如何--注册和触发--软中断

    1. 注册软中断当然是通过open_softirq 例子如下: void __init init_timers(void) { int err = timer_cpu_notify(&time ...

  7. 无法找到.exe的调试信息

    原文:无法找到.exe的调试信息 前天重装了电脑,并配置了Visual Studio2005的VC正则库,boost/regex,运行速度马上快了三倍吧,到底是怎么快的,我还真说不清楚,因为电脑这玩意 ...

  8. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.10

    (1). The numerical radius defines a norm on $\scrL(\scrH)$. (2). $w(UAU^*)=w(A)$ for all $U\in \U(n) ...

  9. LA3942-Remember the Word(Trie)

    题意: 有s个不同的单词,给出一个长字符串把这个字符串分解成若干个单词的连接(可重复使用),有多少种分解方法 分析: dp[i]表示i开始的字符串能分解的方法数 dp[i]=sum(dp[i+len( ...

  10. HDU 5534 Partial Tree 完全背包

    一棵树一共有2*(n-1)度,现在的任务就是将这些度分配到n个节点,使这n个节点的权值和最大. 思路:因为这是一棵树,所以每个节点的度数都是大于1的,所以事先给每个节点分配一度,答案 ans=f[1] ...