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 ...
随机推荐
- C# IIS 服务器上传图片500解决办法
- Windows下卸载Apache、Mysql
卸载Apache 1. 停止服务 2.以管理员身份打开命令环境 3. 删除Apache文件目录 卸载Mysql 一.在控制面板,卸载MySQL的所有组件控制面板——>所有控制面板项——>程 ...
- django 无法生成表
1.删除该APP下migration下的文件,只留init文件即可 2.删除表django_migration的关于该app的所有记录 3.makemigrations,migrate
- Intellij IDEA编辑golang时无法加载系统GOPATH变量
问题: 编译go项目时,报找不到包.从日志看,GOPATH与系统设置的不一致. 如何解决:系统的gopath路径,加到Project libraries中 参考:https://segmentfaul ...
- FDQuery 怎么能插入NULL参数
[FireDAC][Phys][MSSQL]-335. Parameter [fieldAA] data type is unknown. Hint: specify TFDParam.DataTyp ...
- sqlserver中 事物 索引及视图
事务 1.什么是事务 事务是一个不可分割的工作逻辑单元,它包含了一组数据库的操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即要么都执行,要么都不执行 2.事务的4个属性 (1). ...
- C#反射机制详解
反射的定义:审查元数据并收集关於它的类型信息的能力,元数据(编辑后的基本数据单元)就是一大堆表,编译器会创建一个类定义表,一个字段定义表,一个方法定义表等,System.Reflection命名空间包 ...
- byobu copy
Copy and Paste in Scrollback mode (screen/byobu) Enter scrollback mode: F7 Move the cursor to the st ...
- [转载]Core Elements of a Program
原文链接 http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00sc-introduction-to-c ...
- Java读写avro例子
一.avro是一个数据序列化框架,可以高效得进行序列化和反序列化,支持C, C++, C#, Java, PHP, Python, 和Ruby语言.现在使用Java来读写. 二.环境搭建 1.下载av ...