akka-remote可序列化警告

Ric*_*nas 4 scala akka

我正在使用akka远程处理并创建了一个小型Scala应用程序,它将消息发送到其他Scala应用程序.没关系,接收器应用程序设法接收消息,但是我得到了奇怪的序列化警告(如下所示).我尝试按照akka.io远程处理的文档配置序列化,但没有设法找到摆脱这些警告的设置.

我虽然做错了什么并克隆了akka/akka github repo,但我还是运行了 akka-samples/akka-sample-remote-scala.我很惊讶他们有同样的错误.

[WARN] [03/29/2016 16:53:40.137] [LookupSystem-akka.remote.default-remote-dispatcher-8] [akka.serialization.Serialization(akka:// LookupSystem)]使用默认的Java序列化程序class [sample.remote.calculator.Subtract]由于性能影响而不推荐使用.使用另一个序列化程序或使用设置'akka.actor.warn-about-java-serializer-usage'禁用此警告

任何人都能指出正确的方向吗?谢谢.

lut*_*tzh 10

嗯,这不是一个错误,它只是一个警告.Akka将Java序列化用于用户消息,以便人们快速入门,而无需定义任何映射等.但是你不想在生产中使用它,因为它很慢.因此,如果你只是玩游戏,你可以忽略警告(甚至在消息解释时在配置中禁用它).对于严肃的事业,使用JSON,Avro,Kryo,Protobuf ......

在配置中定义自己的序列化程序

akka {
  actor {
    serializers {
      java = "akka.serialization.JavaSerializer"
      proto = "akka.remote.serialization.ProtobufSerializer"
      myown = "docs.serialization.MyOwnSerializer"
    }

    serialization-bindings {
      "java.lang.String" = java
      "docs.serialization.Customer" = java
      "com.google.protobuf.Message" = proto
      "docs.serialization.MyOwnSerializable" = myown
      "java.lang.Boolean" = myown
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您只需要指定消息的接口名称或抽象基类.在歧义的情况下,即消息实现了几个已配置的类,将使用最具体的配置类,即所有其他候选者都是超类的类.

这取自 http://doc.akka.io/docs/akka/2.4.2/scala/serialization.html#serialization-scala

这个主题也包含在令人敬畏的"Akka的禅"演讲中,第7章.


wlk*_*wlk 8

我认为lutzh的答案非常完整.我只能添加,如果要禁用此警告,则应设置以下配置设置:

akka {
  actor {
    warn-about-java-serializer-usage = false
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您只是出于任何原因进行测试,玩游戏或不关心性能,那么使用Java序列化是很好的.