如何更改Akka应用程序的默认Serializer?

时间:2016-07-03 01:17:07

标签: java scala serialization akka kryo

我读了akka序列化page,他们在那里谈到serialization-bindings

serialization-bindings {
      "java.lang.String" = java
      "docs.serialization.Customer" = java
      "com.google.protobuf.Message" = proto
      "docs.serialization.MyOwnSerializable" = myown
      "java.lang.Boolean" = myown
    }

我正在考虑使用kyro序列化并想知道是否有办法在默认情况下启用kyro序列化以完成整个应用程序?而不是给每个类或包名?

这样的东西
serialization-bindings {
     default = kyro
}

2 个答案:

答案 0 :(得分:5)

这就是方法,我用kryo:

addChild

与Kunal类似,我通过有线/存储/序列化以任何方式发送的所有消息都扩展了serializers { kryo = "com.romix.akka.serialization.kryo.KryoSerializer" } serialization-bindings { "com.ex.es.Msg" = kryo "java.io.Serializable" = none } 类。这不仅是因为我不确定是否有办法设置默认的序列化程序,而且还要让我明确,我的应用程序中序列化了什么。

现在试试实际问题

我还必须设置Msg否则我收到一个警告,它不确定,哪个序列化程序可以选择我的类。

所以这可能意味着,默认情况下,case类扩展Serializable并使这样的工作作为默认设置:

"java.io.Serializable" = none

但这只是一个有根据的猜测,目前我没有可能进行测试。

答案 1 :(得分:3)

我这样做的方法是让所有可序列化的类扩展SerializableTrait,然后在我的绑定中,我只使用自定义序列化程序指定我的特征序列化。

akka.actor {
  serializers {
    json-serializer = "io.example.MySerializerClass"
 }
  serialization-bindings {
   "io.example.SerializableTrait" = json-serializer
 }
}