我正在使用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章.
我认为lutzh的答案非常完整.我只能添加,如果要禁用此警告,则应设置以下配置设置:
akka {
actor {
warn-about-java-serializer-usage = false
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只是出于任何原因进行测试,玩游戏或不关心性能,那么使用Java序列化是很好的.
| 归档时间: |
|
| 查看次数: |
6720 次 |
| 最近记录: |