我正在玩Akka的远程和序列化设施,想要了解一些事情要开始 . 我在这里阅读了有关序列化的文档:
http://doc.akka.io/docs/akka/2.3.4/scala/serialization.html
根据文档,似乎只需在我的application.conf中提供这些内容即可:
akka.actor {
serializers {
java = "akka.serialization.JavaSerializer"
proto = "akka.remote.serialization.ProtobufSerializer"
}
serialization-bindings {
"com.mycompany.messages.MyMessage" = proto
}
}
我们假设我在该软件包下有一个案例类,例如:
package com.mycompany.messages;
case class MyMessage(name: String, year: Int)
然后在我的演员中,我可以简单地做这样的事情:
class ClientActor extends Actor {
def receive = {
case x: MyMessage => ...
}
}
这种配置是否足够,还是我需要做更多的事情?我查看了文档中提到的外部序列化程序:https://github.com/romix/akka-protostuff-serialization
这看起来很有希望,但我正在寻找Akka开箱即用的标准 .
我'm also looking into testing for message version compatibility. Let'说 Actor A 与 Actor B 谈话 MessageX
MessageX 最初可能包含这样的字段:
a: String, b: String, c: String
现在让我们说演员B升级它的版本 Message X ,让我们称之为 Message X +1
Message X +1 现在包含另一个字段,如下所示:
a: String, b: String, c: String, d: String
但 Actor A 仍然发送旧版本的消息,只是简单地 Message X ...会_23638694_仍然知道如何反序列化旧消息?
谢谢您的帮助 .
2 回答
Protobuf序列化程序只能序列化Protobuf消息 . 因此,对于您想要的工作,您需要将MyMessage作为protobuf消息 .
只是有关您的版本控制问题的其他信息;
Protobuf可以序列化/反序列化相同消息类型的不同版本 . 您必须在原始文件描述符中维持已存在的字段索引并相应地添加其他新索引 .