zookeeper报错: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException
zookeeper报错: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException
主要因为是没有序列化。
可以使用默认的序列化类。如下所示:
zkClient.setZkSerializer( new SerializableSerializer());
但是使用默认的SerializableSerializer()查看节点数据时,有可能会出现乱码。
我们可以通过实现ZkSerialized接口来自定义序列化类。
首先在pom.xml中添加依赖包guava,如下所示:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>
自定义序列化类,如下:
public class MyZkSerializer implements ZkSerializer {
/**
* 序列化,将对象转化为字节数组
*/
public byte[] serialize(Object obj) throws ZkMarshallingError {
return String.valueOf(obj).getBytes(Charsets.UTF_8);
}
/**
* 反序列化,将字节数组转化为UTF_8字符串
*/
public Object deserialize(byte[] bytes) throws ZkMarshallingError {
return new String(bytes, Charsets.UTF_8);
}
}
接下来只要设置序列化方式就可以了。
zkClient.setZkSerializer(new MyZkSerializer());
如下所示:
/**
* 获取节点数据
*/
public class PathData {
private static Logger logger=Logger.getLogger(PathData.class); public static void main(String[] args) {
String zkServer="127.0.0.1:2181";
String path="/zk-permanent";
ZkClient zkClient=new ZkClient(zkServer,5000);
logger.info("使用zkClient查询节点数据:");
//zkClient需要设置序列化后,才可以获取节点数据。不然会报错:ZkMarshallingError: java.io.EOFException
//默认的SerializableSerializer()可以会出现乱码。以下采用自定义的序列化设置
// zkClient.setZkSerializer( new SerializableSerializer());
zkClient.setZkSerializer(new MyZkSerializer());
zkClient.subscribeDataChanges(path, new IZkDataListener() {
@Override
public void handleDataChange(String dataPath, Object data) throws Exception {
logger.debug("Node:" +dataPath+" changed, new data:"+data);
} @Override
public void handleDataDeleted(String dataPath) throws Exception {
logger.debug("Node:"+dataPath+"deleted");
}
});
logger.debug(path+"节点下的数据为:"+ zkClient.readData(path)); }
}
参考资料:
https://blog.csdn.net/zwt0909/article/details/51737750
zookeeper报错: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException的更多相关文章
- 启动tomcat时,报错:IOException while loading persisted sessions: java.io.EOFException解决方法
报错原因:加载持久化session错误,tomcat加载时读取的文件是是*.ser,session序列化文件,文件的位置是tomcat\work\Catalina\localhost,找到sessio ...
- <<< Tomcat运行报错IOException while loading persisted sessions: java.io.EOFException
解决方法:将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser即可以解决.
- 文件下载 路径中有中文 报错 提示 文件找不到 java.io.FileNotFoundException: http://192.168.1.141:8096/resources/card/comcard/????????/????????.png
此问题主要是中文编码格式不对导致的,将路径中的中文部分设置下编码就可以啦 例如: String url = "http://192.168.1.141:8096/resources/car ...
- 【原创】大叔问题定位分享(8)提交spark任务报错 Caused by: java.lang.ClassNotFoundException: org.I0Itec.zkclient.exception.ZkNoNodeException
spark 2.1.1 一 问题重现 spark-submit --master local[*] --class app.package.AppClass --jars /jarpath/zkcli ...
- org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within
org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeo ...
- Caused by: org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 5000
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandControl ...
- Exception in thread "main" org.I0Itec.zkclient.exception.ZkAuthFailedException: Authentication failure is thrown while creating kafka topic
Exception in thread "main" org.I0Itec.zkclient.exception.ZkAuthFailedException: Authentica ...
- java.lang.ClassNotFoundException: org.I0Itec.zkclient.exception.ZkNoNodeException 异常 如何处理
严重: Context initialization failed java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNo ...
- zookeeper_service 出错 java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException
2016-12-18 08:28:07 ContextLoader:358 ERROR - Context initialization failed java.lang.NoClassDefFoun ...
随机推荐
- 30.纯 CSS 创作一个晃动的公告板
原文地址:https://segmentfault.com/a/1190000014983030 感想: 绝对定位+动画 HTML代码: <div class="signboard&q ...
- 17.1拓展之纯 CSS 创作炫酷的同心圆旋转动画
效果地址:https://codepen.io/flyingliao/pen/ebjEMm?editors=1100 HTML代码: <div class="loader"& ...
- Python: 对CSV文件读写 和 Md5加密
1. python 有专门的csv包,直接导入即可. import csv: 2. 直接使用普通文件的open方法 csv_reader=open("e:/python/csv_data/l ...
- spark快速大数据分析
从上层来看,每个Spark 应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作.驱动器程序包含应用的main 函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应 ...
- centos7+hadoop完全分布式集群搭建
Hadoop集群部署,就是以Cluster mode方式进行部署.本文是基于JDK1.7.0_79,hadoop2.7.5. 1.Hadoop的节点构成如下: HDFS daemon: NameN ...
- javascript中的立即执行函数(function(){…})()
javascript中的立即执行函数(function(){…})() 深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){…})()包 ...
- Spring中的@Transactional 放在 类级别 和 方法级别 上有什么不同?
Spring中的@Transactional 放在类级别 和 方法级别 上有什么不同? @Transactional放在类级别上是否等同于该类的每个方法都放上了@Transactional? 是的一般 ...
- Mysql 定时任务事件
参考文献:https://blog.csdn.net/dream_ll/article/details/73499750
- mybatis初识
mybatis采用弱连接,在一定程度上集中管理了sql的语句编写,又实现了自动映射bean. 此处以最基础的mybatis连接为例: 引入jar包: mybatis-3.4.5.jar ojdbc-6 ...
- 修改页面中显示出需要修改的数据(包括select选择框复显示)
页面中需要用到某个对象时,在底层代码中赋值,然后页面用java代码进行获取调用 如下截图: select复显示:根据后台方法赋值选择框 ,并设置初始值 按钮及选择框的禁用(五种方法): 方法一: $( ...