`

zookeeper学习笔记(二)

阅读更多
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学习笔记.docx

    Zookeeper学习笔记

    Zookeeper学习笔记

    自己整理的ZooKeeper学习笔记,适合刚刚接触ZooKeeper的人学习

    ZooKeeper学习笔记

    java ZooKeeper学习笔记\ZooKeeper原理、运用

    Zookeeper学习笔记.pdf

    ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:**分布式锁服务**。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:**...

    zookeeper学习笔记.pptx

    本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,

    Zookeeper学习资源和笔记(附代码)

    适合初学入门,知识巩固。涵盖安装配置、命令操作、Java API操作、事件监听、分布式锁、集群搭建等知识

    zookeeper完整学习笔记

    - 概述 - 术语 - 分布式应用 - 介绍 - 架构 - 工作流 - Leader选举 - 安装服务 - CLI 操作 - java-api - 动态感知服务器上下线 - 实现Hadoop高可用(Hadoop-HA-High Availability)

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-基于ssm的云的学习笔记系统-ssm-java代码

    zookeeper云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-...

    学习笔记--zookeeper

    zookeeper学习,包括zookeeper架构,原理,安装,配置,命令管理,API编程以及可以应用的场景

    zookeeper一站式学习资料

    zookeeper一站式学习资料包含国内首部Zookeeper从入门到精通+搜索引擎等一条龙学习资料以及视频讲解包含笔记代码资源

    java后端学习笔记

    activeMq,rabbitMq,activity工作流,docker,dubbo,netty,rpc,springcloud,zookeeper学习笔记

    zookeeper笔记

    zookeeper原理以及应用笔记学习总结,适合初学者!欢迎下载

    ZooKeeper.pdf

    Zookeeper技术的基础详细学习笔记,总结了Zookeeper的各个知识点,可以用来复习以及对基础知识的巩固,对新人的学习很有帮助。

    zookeeper-01.xmind

    zk学习笔记

    1.笔记_zookeeper_

    Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。该文档适合学习者学习zookeeper,结构清晰,层次递增,需要学习者配合xmind软件学习

    hbase学习笔记

    比较详细的HBase学习笔记,精心制作 HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其...

    kafka学习笔记.doc

    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算法实战,Zookeeper核心源码...

Global site tag (gtag.js) - Google Analytics