Hazelcast Jet 和 Node.JS 客户端序列化问题
Hazelcast Jet and Node.JS client serialization issue
我将 Jet 0.6 作为备份,一些 Node.JS 进程安装了 hazelcast-nodejs-client 0.8.0。我正在尝试从 Node 进程中推送映射一个对象,该对象恰好反映了 Jet 端的类似对象。但是我不明白如何确保在 Jet 方面这个 JS 对象将分别为 serialized/deserialized。我觉得我需要向 Jet 表明这个 JSON 对象是数据 POJO 并且应该使用适当的 serialization/deserialization。
节点端:
var data = {
id: someObject.did, // long
time: someObject.time, // long
};
dataMap.put(data.id, data).then(
function () {
console.log("Ok");
},
function (error) {
console.error(error);
}
);
Jet 方面:
public class 数据实现Serializable {
private long id;
private long time;
public Data(long id, long time) {
this.id = id;
this.time = time;
}
public long getId() {
return id;
}
public long getTime() {
return time;
}
更新:
我设法追踪调用堆栈到 DefaultSerializer.ts
,它显然负责将 JS 对象转换为 Data
实例,通过 MapProxy
服务发送到缓存:
export class JsonSerializer implements Serializer {
getId(): number {
return -130;
}
read(input: DataInput): any {
return JSON.parse(input.readUTF());
}
write(output: DataOutput, object: any): void {
output.writeUTF(JSON.stringify(object));
}
}
Node.js 和 Java 端都需要适当的序列化配置。但是 Serializable
是一个仅 Java 的接口。因此 Hazelcast Node.js 客户端无法使用它。
您需要您的对象在两侧实现 IdentifiedDataSerializable 或 Portable。
Node.js 识别数据序列化样本:https://github.com/hazelcast/hazelcast-nodejs-client/blob/master/code_samples/org-website/IdentifiedDataSerializableSample.js
Java 识别数据序列化样本:https://github.com/hazelcast/hazelcast-code-samples/tree/master/serialization/identified-data-serializable
我将 Jet 0.6 作为备份,一些 Node.JS 进程安装了 hazelcast-nodejs-client 0.8.0。我正在尝试从 Node 进程中推送映射一个对象,该对象恰好反映了 Jet 端的类似对象。但是我不明白如何确保在 Jet 方面这个 JS 对象将分别为 serialized/deserialized。我觉得我需要向 Jet 表明这个 JSON 对象是数据 POJO 并且应该使用适当的 serialization/deserialization。
节点端:
var data = {
id: someObject.did, // long
time: someObject.time, // long
};
dataMap.put(data.id, data).then(
function () {
console.log("Ok");
},
function (error) {
console.error(error);
}
);
Jet 方面: public class 数据实现Serializable {
private long id;
private long time;
public Data(long id, long time) {
this.id = id;
this.time = time;
}
public long getId() {
return id;
}
public long getTime() {
return time;
}
更新:
我设法追踪调用堆栈到 DefaultSerializer.ts
,它显然负责将 JS 对象转换为 Data
实例,通过 MapProxy
服务发送到缓存:
export class JsonSerializer implements Serializer {
getId(): number {
return -130;
}
read(input: DataInput): any {
return JSON.parse(input.readUTF());
}
write(output: DataOutput, object: any): void {
output.writeUTF(JSON.stringify(object));
}
}
Node.js 和 Java 端都需要适当的序列化配置。但是 Serializable
是一个仅 Java 的接口。因此 Hazelcast Node.js 客户端无法使用它。
您需要您的对象在两侧实现 IdentifiedDataSerializable 或 Portable。
Node.js 识别数据序列化样本:https://github.com/hazelcast/hazelcast-nodejs-client/blob/master/code_samples/org-website/IdentifiedDataSerializableSample.js
Java 识别数据序列化样本:https://github.com/hazelcast/hazelcast-code-samples/tree/master/serialization/identified-data-serializable