zk使用通知移除节点

第1关:创建/删除节点 第1关:创建/删除节点 200 任务要求 参考答案 评论15 任务描述 相关知识 节点类型 持久节点和临时节点 有序节点 创建/删除节点 编程要求 测试说明 任务描述 本关任务:熟悉并掌握四种类型节点的特点,并掌握节点的创建和删除。 相关知识 为了完成本关任务,你需要掌握:1.ZooKeeper服务器开启,2.客服端(zkCli.sh)连接服务器,3.命令行基本操作。 节点类型 ZooKeeper数据模型中的数据单元,称为数据节点(znode)。 ZooK 阅读详情

zk使用通知移除节点

前面:https://www.cnblogs.com/toov5/p/9899238.html 服务发生宕机 咋办?

发个事件通知,告知大家哟,

会有通知事件哦

看项目:

服务端:

package com.toov5.zkDubbo;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import org.I0Itec.zkclient.ZkClient;

//##ServerScoekt服务端
public class ZkServerScoekt implements Runnable {
    private static int port = 18083;  //socket 服务启动后的所使用的 端口号

    public static void main(String[] args) throws IOException {
        ZkServerScoekt server = new ZkServerScoekt(port);  //构造函数传入port
        regServer();  //去zk注册
        Thread thread = new Thread(server);
        thread.start();
    }

    public ZkServerScoekt(int port) {
        this.port = port;
    }
  //注册服务
    public static void regServer(){
        //1、建立zk连接
    ZkClient zkClient = new ZkClient("192.168.91.5",5000,10000);
        //2.先创建父节点
    String root = "/toov5";
    if (!zkClient.exists(root)) {
        //如果父节点不存,直接创建父节点
        zkClient.createPersistent(root);  //持久节点
    }
       //3、创建子节点
     String nodeName = root+"/service_"+port;      
     String nodeValue="127.0.0.1:"+port;
     if (zkClient.exists(nodeName)) {  //如果存在 直接删除掉
        zkClient.delete(nodeName);
    }
     zkClient.createEphemeral(nodeName,nodeValue); //字节的 临时节点  如果服务宕机了 找不到了
     System.out.println("服务注册成功"+nodeName);
     
    }
    
    
    
    public void run() {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(port);
            System.out.println("Server start port:" + port);
            Socket socket = null;
            while (true) {
                socket = serverSocket.accept();
                new Thread(new ServerHandler(socket)).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (serverSocket != null) {
                    serverSocket.close();
                }
            } catch (Exception e2) {

            }
        }
    }

}

客户端

package com.toov5.zkDubbo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;

public class ZkServerClient {
    public static List<String> listServer = new ArrayList<String>();

    public static void main(String[] args) {
        initServer();
        ZkServerClient     client= new ZkServerClient();
        BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            String name;
            try {
                name = console.readLine();
                if ("exit".equals(name)) {
                    System.exit(0);
                }
                client.send(name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 注册所有server 
    public static void initServer() {
        listServer.clear();
//        listServer.add("127.0.0.1:18080"); //连接服务 放到list中   存放集群地址 做负载均衡用的   
        //建立zk连接
        final ZkClient zkClient = new ZkClient("192.168.91.5",5000,10000);
        //读取父节点信息
       final String root = "/toov5";
        List<String> children=zkClient.getChildren(root);
        for(String pString : children){
            //父+子 =完整的路径
            String path = root+"/"+pString;
            String nodeValue =zkClient.readData(path);
            //把值放到集合中去
            listServer.add(nodeValue);
        }
        //服务发现成功
         System.out.println("服务发现:"+listServer.toString());
         //然后给 serverCount赋值
         serverCount=listServer.size();
         
         //使用zk事件监听,如果服务发生宕机情况,重新读取新的节点
         zkClient.subscribeChildChanges(root, new IZkChildListener() {
            
            public void handleChildChange(String arg0, List<String> children) throws Exception {  //children移除之后 剩下的
                System.out.println("有服务宕机了,重新读取新的节点信息"+listServer.toString());
                listServer.clear(); //清除之前的 然后读取最新的
                for(String pString : children){
                    //父+子 =完整的路径
                    String path = root+"/"+pString;
                    String nodeValue =zkClient.readData(path);
                    //把值放到集合中去
                    listServer.add(nodeValue);
                }
                serverCount=children.size();
                System.out.println("服务发现"+listServer.toString());
            }
        });
              
    }
    
    
 
  //请求总数
    private static  int  reqCount = 1;
  //服务个数    
    private static int  serverCount = 0; //初始值是0
    
    // 获取当前server信息
    public static String getServer() {
//        return listServer.get(0);  不能写死  本地负载均衡轮询算法
    String serverName = listServer.get(reqCount%serverCount );
    System.out.println("客户端请求次数:"+reqCount+"对应服务器"+serverName);
    reqCount++;
    return serverName;    
    }
    
    public void send(String name) {

        String server = ZkServerClient.getServer();
        String[] cfg = server.split(":"); 

        Socket socket = null;
        BufferedReader in = null;
        PrintWriter out = null;
        try {
            socket = new Socket(cfg[0], Integer.parseInt(cfg[1]));
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new PrintWriter(socket.getOutputStream(), true);

            out.println(name);
            while (true) {
                String resp = in.readLine();
                if (resp == null)
                    break;
                else if (resp.length() > 0) {
                    System.out.println("Receive : " + resp);
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                out.close();
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>zkDobbo</groupId>
  <artifactId>com.toov5.zkDubbo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
   <dependencies>
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.8</version>
		</dependency>
	</dependencies>
</project>

  

启动三个服务端,一个客户端。然后随机关闭一个服务端:

 

 

 

 控制台:

当有新节点启动时候:

 

 

 核心部分代码欣赏~~

 

基于LSTM语义分析的企业风险预测系统 在数字化时代,企业面临着前所未有的挑战和机遇,而风险管理作为确保企业稳定发展的关键一环,其重要性日益凸显。为了及时、准确地监测和分析企业相关的风险,并预测可能带来的风险,本文介绍了一种基于长短期记忆(LSTM)语义分析的企业风险预测系统。该系统利用深度学习技术,通过将收集到的企业数据进行预处理和分析,结合LSTM模型对文本进行深度语义分析,从而实现对潜在风险的预测和评估。系统设计方面,该系统包括数据预处理、LSTM模型构建与训练、风险预测以及可视化展示等模块。 阅读详情

相关推荐

硬件单板类机考复习提纲

6、 功率晶体管低导通损耗时处于的状态(饱和状态、放大状态、截止状态)(放大器的采样频率特性)总结:元器件特性(电阻、电容、二极管、三极管、晶体、晶振、MOS、磁珠等)信号质量问题产生根因(单调性、边沿过缓、毛刺、回沟、抖动等)3、 几种电容容量范围大小(超级电容、钽电容、陶瓷电容、铝电容)66、背板连接器接触设计的接触顺序(先导向、再地针、最后信号针)28、逻辑电平接口的特性(CMOS、TTL、ECL、PECL)76、差分电平(lvpecl、RS-422/485、cml)

2303_79562407的博客 1万+

ZkClient之删除节点、更新节点、检测节点是否存在。

博文中的内容来源《从Paxos到Zookeeper 分布式一致性原理与实践》这一本书,感激不尽。

孤芳不自赏 6532

Redhawk解析PAD / IOPAD的实现方法

Redhawk解析IOPAD的实现方法1. IOPAD DEF的概念说明2. 生成 IOPAD GDS文件3. 生成 IOPAD DEF文件4. Redhawk解析过程中读取IOPAD DEF 本文主要简述【Redhawk解析IOPAD】的实现原理方法,具体脚本没有放在这里。 1. IOPAD DEF的概念说明 2. 生成 IOPAD GDS文件 注: getinfo2IODEF.tcl 是基于innovus获取IOPAD的摆放信息以及库信息。 run_cerate_iopadgds.csh 是基于c

kobayashiyou的博客 3154

Zookeeper3.5.7版本——客户端命令行操作(节点删除与查看)

Zookeeper3.5.7版本——客户端命令行操作(节点删除与查看)

小志的博客 1970

人工智能100问☞第5问:什么是AI三要素?

人工智能的核心三要素是​​数据、算法和算力​​,分别作为AI的“燃料”、“大脑”和“动力”,三者协同驱动智能系统的学习、推理与决策能力。

bjdx_001的博客 1992

Matlab GUIDE -- 串口操作

1、首先新建-->应用程序-->GUIDE。 2、绘制一个简单的UI。 3、然后右击“打开串口”图标-->查看回调-->callback,即可打开此图标的回调函数,此回调函数是press button时执行(可按需要选择其他回调)。 4、在回调函数中添加打开串口的代码。 delete(instrfindall); %删除所有串口 s3 = serial('CO

Asgard-X 2837

zookeeper 常用操作

本博客介绍了zookeeper日常运维管理中的一些常用命令

渔夫数据库笔记 5395

samba源码编译安装(版本4.13.0)

这里写目录标题前言编译安装samba下载三个包安装依赖共需要安装samba、gnutls、nettle1、进入解压后的samba目录执行:2、进入解压后的gnutls目录执行3、进入解压后的nettle目录执行3.1 卸载已存在nettle3.2 编译3.3 make3.4 安装4、进入gnutls继续编译4.1 编译4.2 make4.3 安装5、再次进入解压后的samba目录5.1 执行./configure5.2 make5.3 samba安装启动samba 前言 一般来说,安装samba最快的方式应

灵葱的博客 1万+

zk常用的命令

zk的命令

qq_45260724的博客 6491

避开PFC设计大坑:从环路分析到参数整定的5个常见误区与解决方案

本文深入解析PFC电路设计中从环路分析到参数整定的5个常见误区,包括电感参数设计、小信号模型适用边界、电压环与电流环耦合效应等。通过实际案例和PSIM仿真数据,提供工程落地的解决方案,帮助工程师避开设计陷阱,提升电路性能与可靠性。

weixin_30666401的博客 325

java技术专家【面试】Java程序员英语面试整个流程

java技术专家【面试】Java程序员英语面试整个流程

大壮 755

java 删除zk节点_zk使用通知移除节点

packagecom.toov5.zkDubbo;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.Socket;importjava.util.ArrayList;importjava.uti...

weixin_28716769的博客 670

Matlab在线性代数中的应用(一):向量组的线性相关性

求列向量组A的一个最大线性无关组可用命令rref(A)将A化成行最简形,其中单位向量对应的列向量即为最大线性无关组所含向量,其它列向量的坐标即为其对应向量用最大线性无关组线性表示的系数。 01 — 例1 求下列矩阵列向量组的一个最大无关组。 解:编写脚本文件如下: >>format rat a=[1,-2,-1,0,2;-2,4,2,6,-6;2,-1,0,2,3;3,3,3,3,4]; b=rref(a) 求得: b...

wenyusuran的专栏 3237

频繁操作zookeeper节点,客户端收不到监听通知

往往对源码的不甚了解,才会不经意间出现问题。 故障现象 生产上某个应用有45个节点,每个节点集成有一个zk客户端,即这45个zk客户端监听同一条zk路径。当该zk路径节点的值被更新,这45个节点会收到节点变动的通知,进行相关业务处理。 某次并行更新6次该zk节点的值(虽然是并行,但是每次setData的时候还是有个时间差,可能比较小)。发现有部分客户端没有通知(因为有些应用节点执行结果不预期)。 ...

程序猿的樊笼 2678

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

分布式锁——zk实现

1 zk分布式锁原理 (参考:https://blog.youkuaiyun.com/xuefeng0707/article/details/80588855) zk使用临时顺序节点+Watch机制实现分布式锁: 加锁:创建临时顺序节点,如果该节点是最小节点则获取到锁,否则对上一个临时节点注册监听。 解锁:删除节点。 下面我们详细分析下加锁和解锁的过程,暂不考虑可重入性和锁超时,参考了curator...

java开发学习积累 1790

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Zookeeper的通知机制是什么?

Zookeeper的通知机制是什么?

java1234的博客 1161

zk源码—1.数据节点与Watcher机制及权限二

三.然后将当前的ServerCnxn对象(即Watcher事件)和数据节点路径,传入到zks.getZKDatabase()的getData()方法中来实现Watcher事件的注册,也就是实现存储Watcher事件到WatchManager中。对于标记了Watcher注册的请求,zk会将其对应的ServerCnxn对象(Watcher事件)存储到DataTree里的WatchManager的HashMap(watchTable和watch2Paths)中。这样的设计能够有效减轻服务端的压力。

mjunz的博客 1026

zk分布式锁

基于ZooKeeper的分布式锁 Zookeeper 是一个分布式的,开放源码的的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop、HBase的重要组件。是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 Zookeeper是架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端可以询问另一台Zookeeper主机。Zookeeper节点将它们的数据存储在一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户.

shihao的博客 1166

Zookeeper的特性和节点数据类型

暂时理解概念:存储少量数据的基于内存的数据库;文件系统数据结构+监听通知机制; 四种类型的znode(节点); 1、PERSISTENT(persistent)持久化目录节点; 即使客户端与zk断开连接,该节点依然存在,只要不手动删除该节点,他将永远存在; 2、PERSISTENT_SEQUENTIAL(persistent_sequential)持久化顺序编号目录节点; 在持久化目录节点基础上,zk给该节点名称进行顺序编号; 3、EPHEMERAL(ephemeral)临时目录节点; 客户端与zk断开连接

qq_42001445的博客 1100

为什么需要zk

我们在kafka里看到了zk的使用,现在我们需要回答一个问题,为什么要用zk,为什么它在分布式系统里有着如此无可替代的地位,什么情况下我们要用zk?我们可以先看一下官网的回答:zk为分布式应用提供分布式协调服务,首先zk是用在分布式系统的,其次提供协调服务,提供什么样的协调服务呢,它另外一个属性是cp,也就是在分布式系统需要一致性的协调服务的时候我们就可以用zk了。zk设计的目标分为四个: zk设...

maoyeqiu的专栏 1256

zookeeper之命令行操作zookeeper节点(三)

转载自Zookeeper CLI,在原来的基础上有一些修改 ZooKeeper 命令行界面(CLI) 用于与ZooKeeper集合进行交互以进行开发。它有助于调试和解决不同的选项。 要执行ZooKeeper CLI操作,首先打开ZooKeeper服务器(“bin/zkServer.sh start”),然后打开ZooKeeper客户端(“bin/zkCli.sh”)。一旦客户端启动,你可以执行...

胖墩的IT博客 3320

zk笔记总结

ZooKeeper 是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。 Zookeeper 保证了如下分布式一致性特性: (1)顺序一致性 (2)原子性 (3)单一视图 (4)可靠性 (5)实时性(最终一致性) 客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也是由所连接的 zookee

weixin_43155073的博客 586

zk应用

1.锁 前提:zk中有有序节点,临时节点在用户断开连接后,会自动失效,并且客户端可以watch机制,对一个节点目录进行操作的监视,一旦改目录有变化会通知客户端, 排他锁:只有一个客户端能够获得锁 获取锁:客户端通过create()在/exclusive/下创建lock临时节点/exclusive/lock节点,对于同一个节点,zk保证只有一个用户会创建成功,即得到了锁。其他未得到锁的客...

Ysh-uestc 249

zookeeper 节点讲解以及实际项目运用

转自:https://www.jianshu.com/p/86acf1df6cdd 前言:最近工作不是很忙,本应该乘着闲暇的时间看书的,之前每天晚上都要翻翻的,可是自己竟然迷恋上了王晓磊 写的 卑鄙的小人-曹操传 刚开始的时候还没啥 后面迷的无法自控,以前中午吃完饭的时候,都是趴着玩手机,现在是一吃完饭都是拿着kindle看上一会儿,弄的技术书好久都没翻过 连博客也不写了,实...

weixin_34061555的博客 88

zookeeper学习心得一:基础讲解---zk节点类型以及对节点的相应操作

zookeeper节点类型     持久节点(PERSISTENT)     所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。     持久顺序节点(PERSISTENT_SEQUENTIAL)     这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每...

pf1234321的专栏 492

zookeeper节点和监听

一、zookeeper节点: 1、PERSISTENT持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,他永久存在 2、PERSISENT_SEQUENTIAL 持久化顺序编号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,zookeeper给该节点名称顺序编号 3、EPHEMERAL 临时目录节点:客户端与zookeeper端开连接后,该节点被删除 4、EPHEMERAL_SEQUENTIAL 临时顺序编号目录节点:客户端与zookeeper端开连

weixin_44130094的博客 3013
上一篇: Zookeeper实现负载均衡原理
下一篇: 分布式锁(Zookeeper实现)
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值