代码之家  ›  专栏  ›  技术社区  ›  Viktor Stolbin

Hazelcast Jet和node.js客户端序列化问题

  •  2
  • Viktor Stolbin  · 技术社区  · 8 年前

    我将jet 0.6作为备份,并安装了带有hazelcast node js客户端0.8.0的node.js进程。我试图从节点进程中映射一个对象,该对象正好是类似对象在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);
        }
    );
    

    在喷气机一侧: 公共类数据实现可序列化{

    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));
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   mustafaiman    8 年前

    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

    推荐文章