springboot整合zookeeper,采用默认序列化方式,读取数据报错。
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.11</version> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency>
zkClient = new ZkClient(new ZkConnection("127.0.0.1:2181"), 10000);
采用默认的序列化方式。在读取数据时,我这里报错。
Object data = zkClient.readData(path, true);
报错内容:Caused by: java.io.EOFException: null
通过baidu,这里要实现自己的序列化方式。
zkClient.setZkSerializer(new StringCustomZkSerializer());
public class StringCustomZkSerializer implements ZkSerializer { /** * 反序列化 * 返回数据格式string * @param bytes * @return * @throws ZkMarshallingError */ @Override public Object deserialize(byte[] bytes) throws ZkMarshallingError { try { return new String(bytes, "utf-8"); } catch (final UnsupportedEncodingException e) { throw new ZkMarshallingError(e); } } /** * 序列化 * 接收string数据 * @param obj * @return * @throws ZkMarshallingError */ @Override public byte[] serialize(Object obj) throws ZkMarshallingError { try { return String.valueOf(obj).getBytes("UTF-8"); } catch (final UnsupportedEncodingException e) { throw new ZkMarshallingError(e); } }