经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » Zookeeper » 查看文章
Zookeeper三个监听案例
来源:cnblogs  作者:给你一个公主抱  时间:2019/2/26 9:31:09  对本文有异议

一、监听某一节点内容

  1. /**
  2. * @author: PrincessHug
  3. * @date: 2019/2/25, 14:28
  4. * @Blog: https://www.cnblogs.com/HelloBigTable/
  5. * 监听一个节点内容的变化
  6. */
  7. public class WatchZoneDemo {
  8. ZooKeeper zkCli = null;
  9. public static void main(String[] args) throws IOException, InterruptedException {
  10. WatchZoneDemo wz = new WatchZoneDemo();
  11. wz.getConnection();
  12. Thread.sleep(Long.MAX_VALUE);
  13. }
  14. private void getConnection() throws IOException {
  15. zkCli = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
  16. public void process(WatchedEvent watchedEvent) {
  17. try {
  18. byte[] data = zkCli.getData("/Wyh", true, null);
  19. System.out.println("监听类型为:" + watchedEvent.getType());
  20. System.out.println("监听路径为:" + watchedEvent.getPath());
  21. System.out.println("数据被修改为:" + new String(data));
  22. System.out.println("=======================================");
  23. } catch (KeeperException e) {
  24. e.printStackTrace();
  25. } catch (InterruptedException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. });
  30. }
  31. }

二、监听某节点目录的变化

  1. /**
  2. * @author: PrincessHug
  3. * @date: 2019/2/25, 14:57
  4. * @Blog: https://www.cnblogs.com/HelloBigTable/
  5. * 监听一个节点的子节点的变化
  6. */
  7. public class WatchChildrenDemo {
  8. ZooKeeper zkCli = null;
  9. public static void main(String[] args) throws IOException, InterruptedException {
  10. WatchChildrenDemo wc = new WatchChildrenDemo();
  11. wc.getConnction();
  12. Thread.sleep(Long.MAX_VALUE);
  13. }
  14. private void getConnction() throws IOException {
  15. zkCli = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
  16. public void process(WatchedEvent watchedEvent) {
  17. ArrayList<String> nodes = new ArrayList<String>();
  18. try {
  19. List<String> children = zkCli.getChildren("/", true);
  20. for (String c:children){
  21. nodes.add(c);
  22. }
  23. System.out.println(nodes);
  24. } catch (KeeperException e) {
  25. e.printStackTrace();
  26. } catch (InterruptedException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. });
  31. }
  32. }

三、Zookeeper当太上下线的感知系统

  1.需求:某分布式系统中,主节点有多台,可以进行动态上下限,当有任何一台机器发生了动态的上下线, 任何一台客户端都能感知得到

  2.思路:

    (1)创建客户端与服务端

    (2)启动client端 并监听

    (3)启动server端 并注册

    (4)当server端发生上下线

    (5)client端都能感知的到

  3.代码

  1. public class ZKServer {
  2. ZooKeeper zk = null;
  3. private String parentNode = "/Servers";
  4. public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
  5. String childNode = "hd1-1";
  6. ZKServer zkServer = new ZKServer();
  7. //获取连接
  8. zkServer.getConnection();
  9. //注册信息
  10. zkServer.regist(childNode);
  11. //业务逻辑,提示上线
  12. zkServer.build(childNode);
  13. }
  14. private void build(String hostname) throws InterruptedException {
  15. System.out.println(hostname + "上线了!!");
  16. Thread.sleep(Long.MAX_VALUE);
  17. }
  18. private void regist(String hostname) throws KeeperException, InterruptedException {
  19. String path = zk.create(parentNode + "/server", hostname.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
  20. System.out.println(path);
  21. }
  22. private void getConnection() throws IOException {
  23. zk = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
  24. public void process(WatchedEvent watchedEvent) {
  25. }
  26. });
  27. }
  28. }
  29. public class ZKClient {
  30. ZooKeeper zk = null;
  31. public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
  32. ZKClient zkClient = new ZKClient();
  33. zkClient.getConnection();
  34. zkClient.watching();
  35. }
  36. private void watching() throws InterruptedException {
  37. Thread.sleep(Long.MAX_VALUE);
  38. }
  39. private void getConnection() throws IOException {
  40. zk = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
  41. public void process(WatchedEvent watchedEvent) {
  42. try {
  43. List<String> children = zk.getChildren("/Servers", true);
  44. ArrayList<String> node = new ArrayList<String>();
  45. for (String c:children){
  46. byte[] data = zk.getData("/Servers/" + c, true, null);
  47. node.add(new String(data));
  48. }
  49. System.out.println(node);
  50. } catch (KeeperException e) {
  51. e.printStackTrace();
  52. } catch (InterruptedException e) {
  53. e.printStackTrace();
  54. }
  55. }
  56. });
  57. }
  58. }

 

原文链接:http://www.cnblogs.com/HelloBigTable/p/10434204.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号