我正在使用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'
禁用此警告
任何人都可以指出正确的方向吗?感谢。
答案 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序列化是可以的。