zookeeper的API简单编程二---服务器上下线的实时通知处理

Zookeeper 教程(超详细) 文章目录1. Zookeeper 入门1.1 概述1.2 特点1.3 数据结构1.4 应用场景2. Zookeeper 安装2.1 下载地址2.2 本地模式安装部署2.3 分布式安装部署2.4 配置参数解读3. Zookeeper 内部原理3.1 选举机制3.2 节点类型3.3 Stat 结构体3.4 监听器原理3.5 写数据流程4. Zookeeper 实战4.1 客户端命令行操作4.2 API 操作4.3.1 IDEA 环境搭建4.3.2 创建 ZooKeeper 客户端4.3.3 创建子节点4.3. 阅读详情

当客户服务器端是一个集群时,集群内服务器的数量可能随时发生变化,有的服务器down机下线,有的服务器上线工作提供服务,而客户端如何感知服务的上下线,并入服务器进行通信呢,这个问题就可以通过zookeeper进行解决。

问题分析:

1.每次有服务器上线提供服务时就要在zookeeper上创建一个临时序列节点,这样当服务器下线时,该服务程序结束,就会删除这个节点

2.上下线都会触发父节点NodeChildrenChanged事件通知

3.客户端注册监听器监听父节点,当接收到这个事件通知时,就去访问父节点,并获取父节点下创建了哪些子节点,就表示可以与哪些服务器进行通信,再通过一定的策略决定于那一台服务器进行交互

server的代码

package bigdata.zkserertest;

import java.io.IOException;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

public class zkServers {
	
	
	private static final String connectString = "lanc05:2181,lanc06:2181,lanc07:2181";
	private static final int sessionTimeout =2000;
	private static final String parent="/servers";
	static ZooKeeper zk =null;
	
	public static void testparent() throws Exception{
		//判断是否存在这个父目录
		Stat exists = zk.exists(parent, false);
		//如果不存在则创建
		if(exists == null){
			zk.create(parent, "IIIII".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);	
			System.out.println(" not exit ,then create----");
		}		
	}
	
	public static void getconnect() throws Exception {
		zk =new ZooKeeper(connectString, sessionTimeout, new Watcher() {
			@Override
			public void process(WatchedEvent event) {
				// TODO Auto-generated method stub
				System.out.print(event + "++++++" + event.getPath());
				try {
					zk.getChildren(parent, true);
				} catch (Exception e) {				
				}
			}
		});
	}
	
	public static void registserver(String args) throws Exception{
		//在父目录下创建一个临时的序列化子节点
		String createsever = zk.create(parent+"/server", args.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
		System.out.println(args + " is online " + createsever );
	}
	
	public static void serverwork(String args) throws Exception {
		System.out.println(args + " start working .....");
		Thread.sleep(Long.MAX_VALUE);
		
	}
	
	public static void main(String[] args) throws Exception {
		
		//// 获取zookeeper的链接
		 getconnect();
		 //先判断着个父目录是否存在,不存在就创建
		 testparent();
		//在zookeeper上注册该服务器
		 registserver(args[0]);
		//执行这个服务器的相关业务
		 serverwork(args[0]);

		
		
	}

}

client代码:

package bigdata.zkserertest;

import java.util.ArrayList;
import java.util.List;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

public class zkClientss {
	
	private static final String connectString = "lanc05:2181,lanc06:2181,lanc07:2181";
	private static final int sessionTimeout =2000;
	private static final String parent="/servers";
	static ZooKeeper zk =null;
	private static volatile List<String> serverList;
	
	public  void getconnect() throws Exception {
		zk =new ZooKeeper(connectString, sessionTimeout, new Watcher() {
			@Override
			public void process(WatchedEvent event) {
				try {
					//再次注册监听,并更新信息
					getznode();
				} catch (Exception e) {				
				}
			}
		});
	}
	
/**
 * 获取子节点的相关信息和数据
 * @throws Exception
 */
public  void getznode() throws Exception{
	List<String> servers = new ArrayList<String>();
	//获取子节点信息,并对父节点进行监听
		List<String> children = zk.getChildren(parent, true); //使用true 就是使用上面的监听器
		for(String child:children){
			System.out.println(child);
			byte[] data = zk.getData(parent+"/"+child, false, null);
			//c把获取的数据给成员变量,以方便给各个客户端的业务使用
			servers.add(new String(data));	
		}
		serverList =servers;
		System.out.println(serverList);
	}

/**
 * 客户端业务
 * @throws Exception
 */
public  void clientwork() throws Exception {
	System.out.println("client starts working .....");
	Thread.sleep(Long.MAX_VALUE);
	
}
	
	public static void main(String[] args) throws Exception {
		
		// 获取zookeeper的链接
		zkClientss zc= new zkClientss();
		zc.getconnect();
		//查看zookeeper下/servers目录下的子目录
		zc.getznode();
		//业务线程使用
		zc.clientwork();
	}

}


Zookeeper学习:Zookeeper 的 API 使用 1. API 相关介绍 Zookeeper作为一个分布式框架,主要用来解决分布式一致性问题,它提供了简单的分布式原语,并且对多种编程语言提供了APl,Zooeeper API 共包含五个包,分别为∶ org.apache.zookeeper org.apache.zookeeper.data org.apache.zookeeper.server org.apache.zookeeper. server.quorum org.apache.zookeeper.server.upgrade 其中 org. 阅读详情

相关推荐

Zookeeper总结——知识点、选举机制、客户端操作及写数据流程、API操作、zookeeper分布式锁之 Curator、ZAB协议、CAP理论之zookeeper的CP理论

Zookeeper一、什么是zookeeper1、zookeeper概述2、zookeeper特点3、zookeeper数据结构4、zookeeper应用场景二、Zookeeper本地安装1、本地模式安装2、配置参数解读三、Zookeeper集群操作1、集群操作1.1集群安装1.2 选举机制(面试重点)1.3 ZK集群启动停止脚本2、客户端命令行操作2.1 命令行基本语法2.2 znode节点数据信息2.3 节点类型 一、什么是zookeeper 1、zookeeper概述 Zookeeper是一个开源的

weixin_44090845的博客 2473

基于Zookeeper实现服务器上下线通知

一、Zookeeper简介 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。 1.1 Zookeeper工作机制 Zookeeper是基于观察者设计模式设计的分布式服务管理框架,它负责存储和管理大家关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。 1.2 Zookeeper特点 Zookeeper集群有一个Leader和多个Follower组成 集群中要有半数以上节点存

小王是个弟弟 2556

命令行驱动视频剪辑:cutcli与AI自动化工作流实战

在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与

weixin_42520239的博客 579

Zookeeper服务器动态上下线监听案例

Zookeeper服务器动态上下线监听案例

m0_58524181的博客 890

【Qt】QML-01:使用QtCreator10创建QML工程,并讲解第一个程序:Hello World

QML第一讲:创建QML工程、详解QML第一个程序Hello World

郭老二 7796

别再为10G UDP发愁了!手把手教你用Xilinx 10G/25G Ethernet Subsystem IP核搭建FPGA网络栈(附12套工程源码)

本文详细介绍了基于Xilinx UltraScale架构的FPGA网络栈开发,重点讲解了10G/25G Ethernet Subsystem IP核的应用实践。通过手把手教程和12套工程源码,帮助开发者解决10G UDP通信中的物理层接口、协议栈实现和系统集成等核心挑战,实现高性能FPGA网络栈搭建。

weixin_42522575的博客 365

spring篇-(ssm基于zookeeperPropertySource实现动态配置刷新)

ssm基于zookeeperPropertySource实现动态配置刷新写在前面修改PropertySourceLocator接口修改PropertySourceUtils定义配置相关事件类修改ZookeeperPropertySourceLocator相关代码定义DynamicValue注解,标注用于配置刷新的字段或者方法定义用于配置刷新的包装类定义动态配置后置处理器修改PropertySourceLocatorProcessor修改测试controller,加入用于标记动态配置的注解启动项目,查看加载的

qq_42413011的博客 555

UWB 多传感器通信的纳秒无线位置和时钟同步方法

利用UWB高精度的特点,实现多节点下的无线时钟同步和定位。通过优化硬件架构,减少不确定延迟的影响,系统可以提供纳秒级时钟同步消息

DT程序员的博客 1330

一套方案轻松实现Zookeeper服务器动态上下线和分布式锁

ZooKeeper是⼀个典型的发布/订阅模式的分布式数据管理与协调框架,我们可以使⽤它来进⾏分布式 数据的发布与订阅。另⼀⽅⾯,通过对ZooKeeper中丰富的数据节点类型进⾏交叉使⽤,配合Watcher 事件通知机制,可以⾮常⽅便地构建⼀系列分布式应⽤中都会涉及的核⼼功能,如数据发布/订阅、命名 服务、集群管理、Master选举、分布式锁和分布式队列等。那接下来就针对这些典型的分布式应⽤场景 来做下介绍。 Zookeeper的两⼤特性: 1.客户端如果对Zookeeper的数据节点注册Watcher监

ygk004的博客 6569

【LLC快速上手系列】LLC轻载时,死区时间怎么调才对?别再傻傻乱搞了!

死区时间,就是指。如果你死区设得好,就能让开通前 ( V_DS to 0 ),完美实现!

weixin_43199439的博客 1857

深度学习流体力学:基于PyTorch的物理信息神经网络(PINN)完整实现

本文介绍了基于物理信息神经网络(PINN)的深度学习流体力学求解器实现。首先阐述了Navier-Stokes方程的理论基础,包括连续性方程和动量守恒方程,并解释了PINN的核心原理:将物理方程作为约束条件嵌入神经网络损失函数。以经典的lid-driven cavity流动为例,详细展示了使用PyTorch实现的全流程,包括神经网络架构设计、自动微分求解Navier-Stokes方程、多约束条件优化训练等关键环节。该求解器通过将物理方程、边界条件和初始条件整合到损失函数中,实现了对流体力学问题的端到端求解,为

源代码杀手的博客 9844

zookeeper实现获取实例列表与动态感知服务上下线状态

ZK: 相当于是一个文件系统 + 通知机制(观察者模式)image.png# 过程创建持久化的根节点 /server-pig客户端监听/server-pig节点下的子节点的上线/下线,当有...

futao__的博客 369

告别定位不准!Inner-IoU助力YOLOv11边界框回归精度飙升

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv11 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

FJN110的博客 192

ZooKeeper学习笔记(八):服务器动态上下线原理

服务器动态上下线 客户端能实时洞察到服务器上下线的变化 步骤顺序 服务器1号 服务器2号 服务器3号 客户端1号 客户端1号 客户端1号 ZooKeeper集群(假设有三台分别是zk-1,zk-2,zk-3) 1 服务端启动的时候去ZooKeeper中去注册信息(创建的都是临时节点) 服务端启动的时候去ZooKeeper中去注册信息(创建的都是临时节点) 服务端启动的时候去ZooKeeper中去注册信息(创建的都是临时节点) 这时服务器1,2,3号分别在ZooKeeper中注册对应的临

社畜程序员的无聊博客 4394

SLAM 轨迹评估工具——EVO安装、使用介绍

evo是一款用于视觉里程计和SLAM问题的轨迹评估工具. 核心功能是能够绘制相机的轨迹, 或评估轨迹与真值之间的误差. 支持多种数据集的轨迹格式(TUM、KITTI、EuRoC MAV、ROS的bag), 同时支持这些数据格式之间的相互转换,本文轨迹展示以tum数据格式为例。

u010196944的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

大数据学习心得2020-09-10--Zookeeper基本学习与模拟服务器动态上下线监听API实现

ZooKeeper Zookeeper简介 概述 zookeeper十一i个开源的分布式的,为分布式应用提供协调服务地Aoache项目。 zookeeper是基于观察者模式地风不是服务管理框架。 ​ 它负责存储和管理大家都关心的数据,然后接受观察者的注册。一旦这些数据发生变化,zk就负责通知所有已经在zk上注册的那些观察者做出的响应的反应。 zookeeper = 文件系统 + 通知系统 特点 zk是由一个leader和多个follower组成的集群 集群中只要有半数以上的节点存活,zk集群就能正

airleaya的博客 730

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Zookeeper的简单运用 -- 基于ZK的分布式共享锁、应用系统服务器上下线动态感知

Zookeeper的简单运用 1. ZooKeeper Java API org.apache.zookeeper.Zookeeper: Zookeeper 是在 Java 中客户端主类,负责建立与 zookeeper 集群的会话, 并提供方法进行操作。 org.apache.zookeeper.Watcher Watcher 接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑, 包...

JeremyIverson的博客 425

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Zookeeper的通知机制是什么?

Zookeeper的通知机制是什么?

java1234的博客 1495

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

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

程序猿的樊笼 2679

ZooKeeper

ZooKeeper的概述,单体安装以及分布式安装、客户端操作命令以及Java客户端操作

学习记录和总结 1万+

Zookeeper集群

文章目录Zookeeper简介什么是Zookeeper?Zookeeper的功能Zookeeper工作机制Zookeeper应用场景Zookeeper安装zookeeper分布式安装Zookeeper命令行Zookeeper选举机制为什么ZK集群需要奇数台服务器?服务器动态上下线感知 Zookeeper简介 Apache Zookeeper:把Zookeeper拆开来读,zoo-keeper,即动...

Even710的博客 1339

Zookeeper基础入门与安装部署详解

【1】Zookeeper基础入门 ① Zookeeper是什么 Zookeeper是一个开源的分布式的、为分布式应用提供协调服务的Apache项目。 Zookeeper从设计模式角度来理解,其实是一个基于观察者模式设计的分布式服务管理框架。它负责存储和管理大家都关心的数据,然后接受观察者的注册。一旦这些数据的状态发送变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出...

小小默:进无止境 2012

Zookeeper API

Zookeeper类是线程安全的。 使用客户端来创建一个和zk服务端连接的句柄,这就是一个会话(session)。Session一旦建立,状态就是连接中(CONNECTING)状态,然后客户端会尝试去连接zk服务端,连接成功之后状态变成已连接(CONNECTED)。一般正常情况下只会有这两个状态。不过,还是会发生一些无法恢复的错误/故障,比如:session过期,认证失败,或者客户端关闭连接,这...

JinXYan的博客 359

Zookeeper笔记

此文章为Hadoop集群中Zookeeper框架笔记。

hhhyixin的博客 738

Zookeeper实战案例(1)

本文介绍了一个Zookeeper 服务器动态上下线监听的案例

WHY的博客 864

Zookeeper详解--(入门、原理及实战)

1. Zookeeper概述 1.1 概述 美团,饿了么,淘宝,58同城等等应用都是zookeeper的现实生活版 老孙我开了个饭店,如何才能让大家都能吃到我们的饭菜?需要入驻美团,这样大家就可以在美团 app中看到我的饭店,下订单,从而完成一次交易 Zookeeper是一个开源的分布式(多台服务器干一件事)的,为分布式应用提供协调服务的 Apache项目。 在大数据技术生态圈中,zookeeper(动物管理员),Hadoop(大象),Hive(蜜蜂), Pig(猪)等技术 1.2 工作机制

qq_45441466的博客 3169
上一篇: zookeeper的API简单编程一
下一篇: zookeeper的API简单编程三---分布式共享锁的实现
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值