akka-remote可序列化警告

时间:2016-03-29 15:07:15

标签: scala akka

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

我虽然做错了什么并且克隆了akka / akka github repo,但我 sbt run 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)]使用默认值类[sample.remote.calculator.Subtract]的Java序列化程序,由于性能影响,不推荐使用它。使用另一个序列化程序或使用设置' akka.actor.warn-about-java-serializer-usage'

禁用此警告

任何人都可以指出正确的方向吗?感谢。

2 个答案:

答案 0 :(得分: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
    }
  }
}
  

您只需指定接口或抽象基础的名称   消息的类。在含糊不清的情况下,即消息   实现了几个已配置的类,最具体   将使用配置的类,即所有其他类   候选人是超级班。

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

主题也在精彩的"Zen of Akka"演示文稿第7章中介绍。

答案 1 :(得分:8)

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

akka {
  actor {
    warn-about-java-serializer-usage = false
  }
}

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