在
zookeeper学习笔记(一)中记录了zookeeper相关概念,这一篇是使用zookeeper开发。
一、安装
zookeeper的安装参考
Kafka学习笔记【二】-安装 中的第二章节,注意zookeeper.propertis对应为zoo.properties.
安装完成之后,可以使用客户端命令:
zkCli.cmd -timeout 5000 -server 192.168.3.118:2181
连接上之后,再使用ls path 和 get path等命令查看服务器数据
二、Java编码
zookeeper java开发一般有三种方式:
1) zookeeper 原生api, 封装层次较低,有很多功能需要自行优化,如断网重连,通知后自动watch等。
2) zkClient 高级api, 对重连,自动watch等进行了分装
3) curator 更加高级api, 除了提供zkClient的功能外, 还提供了选举,分布式锁等高级功能的封装。
因此, 为了后续更快的实现扩展功能,我选择curator.
由于zookeeper我安装的是3.4.6, 因此选择curator 2.12.0版本兼容性会好一些。
1. pom 依赖
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
2. java 代码实现服务节点监控功能
package cn.gov.zjport.gtw.gateway.in.service.impl;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.RetryNTimes;
import org.apache.zookeeper.CreateMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import cn.gov.zjport.gtw.GtwConstants;
import cn.gov.zjport.gtw.gateway.in.service.ZkService;
import cn.gov.zjport.gtw.utils.IpUtil;
@Service("zkService")
public class ZkServiceImpl implements ZkService{
private Logger logger = LoggerFactory.getLogger(this.getClass());
//zookeeper集群地址
@Value("${gtw.zk.address}")
private String zkAddress;
//重连重试次数
@Value("${gtw.zk.retry.times}")
private int zkRetryTimes;
//重连间隔时间
@Value("${gtw.zk.retry.interval}")
private int zkRetryInterval;
private CuratorFramework client;
private final SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
private static String zkNodePath;
@PostConstruct
public void init() throws Exception{
client =CuratorFrameworkFactory.builder()
.connectString(zkAddress)
.retryPolicy(new RetryNTimes(zkRetryTimes, zkRetryInterval))
.namespace(GtwConstants.PROJECT_SIMPLE_CODE.toLowerCase())
.build();
client.start();
zkNodePath=GtwConstants.SERVER_NODES_PATH+GtwConstants.ZOOKEEPER_DELIMITER+IpUtil.getLocalRealIp();
}
@Override
public List<String> getLiveIps() throws Exception{
//查询节点下所有的子节点
return client.getChildren().forPath(GtwConstants.SERVER_NODES_PATH);
}
@Override
public void setLiveIp() throws Exception{
//检测节点是否存在
if(client.checkExists().forPath(zkNodePath)==null){
//创建临时节点
client.create()
.creatingParentContainersIfNeeded()
.withMode(CreateMode.EPHEMERAL)
.forPath(zkNodePath,sdf.format(new Date()).getBytes());
}else{
logger.error("启动时发现相同的ip[{}]已存在,请确认主机ip配置是否正确",IpUtil.getLocalRealIp());
//修改节点数据
client.setData().forPath(zkNodePath,sdf.format(new Date()).getBytes());
}
}
@Override
public void removeLiveIp() throws Exception{
//删除节点
client.delete().forPath(zkNodePath);
}
@PreDestroy
public void destroy(){
client.close();
}
}
分享到:
相关推荐
### Zookeeper 学习笔记 #### 一、Zookeeper 简介与安装配置 **Zookeeper** 是一个分布式协调服务框架,它提供了一种高效可靠的机制来维护集群中的配置信息、命名服务以及提供分布式锁等功能,使得开发人员能够...
该项目为基于Java语言的Zookeeper学习笔记设计源码,总计包含20个文件,具体构成包括15个Java源文件、3个PNG图片文件以及1个Markdown文件。此外,项目还包含1个XML配置文件,适用于学习和实践Zookeeper相关知识。
ZooKeeper 学习笔记 ZooKeeper 是一个开源的分布式协调服务,由 Hadoop 的创始人 Doug Cutting 等人开发。它为分布式应用提供了一个高效、可靠的协调机制,帮助开发者快速构建高可用、可扩展的分布式系统。 ...
Zookeeper是一种重要的分布式协调服务,尤其在处理高可用性、高性能的应用场景中。它最初设计的核心功能是提供分布式锁服务,但随着社区的发展,Zookeeper的功能得到了扩展,现在还用于配置维护、组服务、分布式消息...
【Zookeeper学习笔记】 Zookeeper是一个分布式协调服务,它的核心目标是简化分布式环境下的数据管理与系统协调。作为Apache Hadoop和HBase的重要组件,Zookeeper提供了简单的原语集,支持分布式应用程序之间的通信...
本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,
### ZooKeeper概述 ZooKeeper,如同其名字所暗示的那样,扮演着“动物园管理员”的角色,主要负责管理和协调各种分布式应用程序(如Hadoop、Hive、Pig等)。它是一个开源的分布式协调服务框架,旨在帮助开发者解决...
总的来说,尚硅谷2021年的ZooKeeper笔记提供了一套全面的学习资源,帮助开发者深入了解ZooKeeper的工作原理及其在分布式系统中的关键作用。通过深入学习和实践,可以提升在分布式协调领域的技术水平。
【Zookeeper概述】 Apache ZooKeeper 是一款开源的分布式协调服务,设计用于管理和简化分布式环境中的数据协调任务。它提供了一种简单、高可用且容错的机制,使得开发者可以专注于核心业务逻辑,而不是复杂的分布式...
Zookeeper是Apache Hadoop项目下的一个子项目,它是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。...通过深入学习和实践,可以更好地应对分布式环境中的各种挑战。
### Zookeeper概述 Zookeeper是一种分布式协调服务框架,它的核心任务是为用户的分布式应用程序提供一系列的协调...无论是从其提供的服务还是从其内部的机制来看,Zookeeper都是值得深入学习和掌握的重要技术之一。
本篇笔记主要围绕这两个技术进行深入探讨,结合尚硅谷的视频教程资源,旨在帮助读者全面理解并掌握这两者的核心知识。 一、Zookeeper:分布式协调服务 Zookeeper是由Apache开发的一款开源分布式协调服务,它提供了...
【Zookeeper概述】 Zookeeper是Apache Hadoop的一个子项目,主要设计用于解决分布式环境中的数据管理问题,如统一命名服务、状态同步、集群管理和配置管理等。作为一个分布式服务框架,Zookeeper采用Java编写,同时...
《Zookeeper一站式学习资料》是一份全面覆盖Zookeeper基础到高级知识的学习资源包,旨在帮助初学者快速入门并深入理解Zookeeper。这份资料包含了丰富的文本资料、视频教程以及相关的实践代码,是学习分布式协调服务...
“zookeeper学习笔记.vsdx”可能是一个Visio图表,用于可视化Zookeeper的数据结构、工作流程或架构;而“zookeeper-trunk”可能是一个源码仓库,包含Zookeeper的源代码,适合深入理解其内部机制和进行二次开发。 ...
而“尚硅谷大数据技术之Zookeeper.xmind”思维导图,则是将整个Zookeeper的知识体系以图形化的形式展现出来,帮助学习者梳理知识点,形成全面的认知框架。 总的来说,这个教程提供了从理论到实践的全面学习材料,...
【描述】"dubbo+zookeeper入门资源,可直接使用,适合新手练习使用"意味着这个压缩包包含了学习和实践这两个技术的基础材料。通过这个资源,初学者可以了解如何配置和使用Dubbo与Zookeeper来实现服务间的通信和管理...
#### 二、Zookeeper整体运行机制 Zookeeper的核心是原子广播(Atomic Broadcast)协议,该协议保证了事务的顺序一致性。当客户端向Zookeeper发起请求时,Zookeeper会通过一系列机制确保所有的服务器最终达成一致的...