Сериализация Akka Kryo для Java - PullRequest
0 голосов
/ 23 ноября 2018

Я получаю сообщение об ошибке, в котором говорится: «Нет настроенных привязок сериализации для класса [testes.Hello]». Я выполнил все шаги на https://github.com/romix/akka-kryo-serialization, и, похоже, все идет в соответствии с инструкциями.Хотя, кажется, не могу найти правильный путь для моего класса, не важно, что.

Вот мой класс .conf:

    akka {
actor {
    warn-about-java-serializer-usage = false
    provider = "akka.remote.RemoteActorRefProvider"
}

remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    netty.tcp {
        hostname = "127.0.0.1"
        port = 2554
    }
}

serializers {
    java = "akka.serialization.JavaSerializer"
    # Define kryo serializer
    kryo = "com.romix.akka.serialization.kryo.KryoSerializer"
}

serialization-bindings {
    "java.io.Serializable" = none
    "testes.Hello" = kryo
    "main.testes.Hello" = kryo
    "src.testes.Hello" = kryo
    "Hello" = kyro

}

extensions = ["com.romix.akka.serialization.kryo.KryoSerializationExtension$"]

kryo  {
  type = "graph"
  idstrategy = "incremental"
  # custom-queue-builder = "a.b.c.KryoQueueBuilder"
  buffer-size = 4096
  max-buffer-size = -1
  use-manifests = false
  use-unsafe = false
  post-serialization-transformations = "lz4,aes"
  encryption {
      aes {
          mode = "AES/CBC/PKCS5Padding"
          key = j68KkRjq21ykRGAQ
          IV-length = 16
          custom-key-class = "CustomAESKeyClass"
      }
  }
  implicit-registration-logging = false
  kryo-trace = false
  # kryo-custom-serializer-init = "testes.Hello"
  resolve-subclasses = false
  #mappings {
   #   "testes.Hello" = 20,
  #}
  classes = [
      "testes.Hello"
  ]
  }
}

Я попробовал все пути, которые я могу придумать в сериализации.привязки, но ни один, кажется, не работает.Также вот класс Hello:

    package testes;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoSerializable;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;

public class Hello implements KryoSerializable {
long counter;
int hash;
String addr;

public Hello(long counter,int hash,String addr) {
    this.counter = counter;
    this.hash = hash;
    this.addr = addr;
}

public Hello() {

}

public void read(Kryo kryo, Input in) {
    counter = in.readLong();
    hash = in.readInt();
    addr = in.readString();
}

public void write(Kryo kryo, Output out) {
    out.writeLong(counter);
    out.writeInt(hash);
    out.writeString(addr);
}
}

В github есть кое-что об использовании kryo.register (myClass), который я нигде не использую, поскольку я не совсем понимаю, куда мне нужно было бы поместитьчто.

...