zookeeper报错: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException

主要因为是没有序列化。

可以使用默认的序列化类。如下所示:

  1. zkClient.setZkSerializer( new SerializableSerializer());

但是使用默认的SerializableSerializer()查看节点数据时,有可能会出现乱码。

我们可以通过实现ZkSerialized接口来自定义序列化类。

首先在pom.xml中添加依赖包guava,如下所示:

  1. <dependency>
  2. <groupId>com.google.guava</groupId>
  3. <artifactId>guava</artifactId>
  4. <version>25.1-jre</version>
  5. </dependency>

自定义序列化类,如下:

  1. public class MyZkSerializer implements ZkSerializer {
  2. /**
  3. * 序列化,将对象转化为字节数组
  4. */
  5. public byte[] serialize(Object obj) throws ZkMarshallingError {
  6. return String.valueOf(obj).getBytes(Charsets.UTF_8);
  7. }
  8.  
  9. /**
  10. * 反序列化,将字节数组转化为UTF_8字符串
  11. */
  12. public Object deserialize(byte[] bytes) throws ZkMarshallingError {
  13. return new String(bytes, Charsets.UTF_8);
  14. }
  15. }

接下来只要设置序列化方式就可以了。

  1. zkClient.setZkSerializer(new MyZkSerializer());

如下所示:

  1. /**
  2. * 获取节点数据
  3. */
  4. public class PathData {
  5. private static Logger logger=Logger.getLogger(PathData.class);
  6.  
  7. public static void main(String[] args) {
  8. String zkServer="127.0.0.1:2181";
  9. String path="/zk-permanent";
  10. ZkClient zkClient=new ZkClient(zkServer,5000);
  11. logger.info("使用zkClient查询节点数据:");
  12. //zkClient需要设置序列化后,才可以获取节点数据。不然会报错:ZkMarshallingError: java.io.EOFException
  13. //默认的SerializableSerializer()可以会出现乱码。以下采用自定义的序列化设置
  14. // zkClient.setZkSerializer( new SerializableSerializer());
  15. zkClient.setZkSerializer(new MyZkSerializer());
  16. zkClient.subscribeDataChanges(path, new IZkDataListener() {
  17. @Override
  18. public void handleDataChange(String dataPath, Object data) throws Exception {
  19. logger.debug("Node:" +dataPath+" changed, new data:"+data);
  20. }
  21.  
  22. @Override
  23. public void handleDataDeleted(String dataPath) throws Exception {
  24. logger.debug("Node:"+dataPath+"deleted");
  25. }
  26. });
  27. logger.debug(path+"节点下的数据为:"+ zkClient.readData(path));
  28.  
  29. }
  30. }

参考资料:

https://blog.csdn.net/zwt0909/article/details/51737750

zookeeper报错: org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.EOFException的更多相关文章

  1. 启动tomcat时,报错:IOException while loading persisted sessions: java.io.EOFException解决方法

    报错原因:加载持久化session错误,tomcat加载时读取的文件是是*.ser,session序列化文件,文件的位置是tomcat\work\Catalina\localhost,找到sessio ...

  2. <<< Tomcat运行报错IOException while loading persisted sessions: java.io.EOFException

    解决方法:将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser即可以解决.

  3. 文件下载 路径中有中文 报错 提示 文件找不到 java.io.FileNotFoundException: http://192.168.1.141:8096/resources/card/comcard/????????/????????.png

    此问题主要是中文编码格式不对导致的,将路径中的中文部分设置下编码就可以啦 例如: String url =  "http://192.168.1.141:8096/resources/car ...

  4. 【原创】大叔问题定位分享(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 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. java.lang.ClassNotFoundException: org.I0Itec.zkclient.exception.ZkNoNodeException 异常 如何处理

    严重: Context initialization failed java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNo ...

  9. 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 ...

随机推荐

  1. Apache 服务器 基础知识小结

    Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软 ...

  2. 【3-28】JavaScript的DOM操作

    一.定义:DOM是一种用于HTML和XML文档的编程接口. 二.Windows对象操作: (一)Window.open(URL,name,features,replace) 1.URL;页面地址 2. ...

  3. 【ASP.NET 进阶】判断访问网站的客户端是PC还是手机

    主要就是通过客户端传递的User-agent来判断访问网站的客户端是PC还是手机,.NET中就是Request.ServerVariables["HTTP_USER_AGENT"] ...

  4. Linux定时任务 结合PHP实现实时监控

    首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务. 所有用户定义的 crontab 都被保存在/var/spool/cron ...

  5. JS 原型链 prototypt 和隐式原型 _proto_

    prototype(原型) :  对象的一个属性,此属性使您有能力向对象添加属性和方法,当访问对象不存在属性是会自动到 prototype 中找 _proto_(隐式原型): 此对象构造函数(类)的原 ...

  6. EventBus 源码学习

    打开一看,原来相关代码并不多,下面看下细节 主要方法也就是注册,取消注册和发送事件,可以看到两个主要的变量就是subscribers和dispatcher public void register(O ...

  7. 尚硅谷redis学习5-初识redis.conf

    redis.conf是redis的配置文件,在解压后的redis安装文件夹下 单位 1  配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit    2  对大小写不敏感 包含 ...

  8. php压力测试工具简单实用方法

    命令 ab -h 指令帮助 ab -n100 -c10 http://www.baidu.com 发起100个请求 并发数为10 设置测试地址是百度,注意测试测试时候请求数和并发数尽量设置低一点 Re ...

  9. JSON数据的解析和生成(Swift)

    Codable public typealias Codable = Decodable & Encodable public protocol Decodable {} public pro ...

  10. Linux awk命令使用方法

    awk是linux上非常好用的文本处理工具,常用于指定列的处理,包括获取指定列的内容.根据指定列匹配关系输出等文本处理.本文主要描述awk命令的基本语法.正则表达式与操作符的使用.常用内置变量的含义和 ...