我将Jet 0.6作为备份,并安装了hazelcast-nodejs-client 0.8.0的一些Node.JS进程。我试图推动从Node进程映射对象,这恰好反映了Jet端类似对象。但是我不明白如何在Jet方面确保此JS对象将分别进行序列化/反序列化。我有一种感觉,我需要向Jet表示,这个JSON对象是Data POJO,应该使用适当的序列化/反序列化。
在节点侧:
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方面: 公共类数据实现可序列化的{
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));
}
}
答案 0 :(得分:3)
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