Scala Akka和Protocol Buffers

HiC*_*123 6 scala protocol-buffers akka

我正在玩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
 }
}
Run Code Online (Sandbox Code Playgroud)

我们假设我在该软件包下有一个案例类,例如:

package com.mycompany.messages;
case class MyMessage(name: String, year: Int)
Run Code Online (Sandbox Code Playgroud)

然后在我的演员中,我可以简单地做这样的事情:

class ClientActor extends Actor {

     def receive = {
        case x: MyMessage => ...
     }
}
Run Code Online (Sandbox Code Playgroud)

这种配置是否足够,还是我需要做更多的事情?我看过这里的文档中提到的外部序列化程序:https: //github.com/romix/akka-protostuff-serialization

这看起来很有希望,但我正在寻找Akka开箱即用的标准.

我也在考虑测试消息版本的兼容性.假设Actor A使用MessageXActor B 对话

MessageX最初可能包含这样的字段:

a: String, b: String, c: String
Run Code Online (Sandbox Code Playgroud)

现在让我们说Actor B升级它的Message X版本,让我们称之为Message X +1

消息X + 1现在包含另一个字段,如下所示:

a: String, b: String, c: String, d: String
Run Code Online (Sandbox Code Playgroud)

但是Actor A仍然发送旧版本的消息,只是简单的消息X ... 演员B是否仍然知道如何反序列化旧消息?

谢谢您的帮助.

Vik*_*ang 4

Protobuf 序列化器只能序列化 Protobuf 消息。因此,为了让事情按照你想要的方式工作,你需要将 MyMessage 设为 protobuf 消息。

  • 您能否提供更多详细信息:“如何使 MyMessage 成为 protobuf 消息”?或者有什么有用的链接吗? (2认同)