在
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学习笔记,适合刚刚接触ZooKeeper的人学习
java ZooKeeper学习笔记\ZooKeeper原理、运用
ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:**分布式锁服务**。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:**...
本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,
适合初学入门,知识巩固。涵盖安装配置、命令操作、Java API操作、事件监听、分布式锁、集群搭建等知识
- 概述 - 术语 - 分布式应用 - 介绍 - 架构 - 工作流 - Leader选举 - 安装服务 - CLI 操作 - java-api - 动态感知服务器上下线 - 实现Hadoop高可用(Hadoop-HA-High Availability)
zookeeper云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-...
zookeeper学习,包括zookeeper架构,原理,安装,配置,命令管理,API编程以及可以应用的场景
zookeeper一站式学习资料包含国内首部Zookeeper从入门到精通+搜索引擎等一条龙学习资料以及视频讲解包含笔记代码资源
activeMq,rabbitMq,activity工作流,docker,dubbo,netty,rpc,springcloud,zookeeper学习笔记
zookeeper原理以及应用笔记学习总结,适合初学者!欢迎下载
Zookeeper技术的基础详细学习笔记,总结了Zookeeper的各个知识点,可以用来复习以及对基础知识的巩固,对新人的学习很有帮助。
zk学习笔记
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。该文档适合学习者学习zookeeper,结构清晰,层次递增,需要学习者配合xmind软件学习
比较详细的HBase学习笔记,精心制作 HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其...
1.kafka的基础知识(安装、部署、基础概念,版本) ...4.kafka中的zookeeper 5. kafka如何不丢消息 6.kafka多线程消费 7.kafka重组平衡 8.kafka控制器 9.kafka监控 10.kafka集群部署及调优 11. 代码见《kafka学习代码》
非常强的一套Zookeeper集群实战,包含了全套的学习代码,学习笔记还有学习资料。内容从Zookeeper入门教学,本地安装,Zookeeper集群实战,项目需求,Zookeeper企业面试实战,Zookeeper算法实战,Zookeeper核心源码...