Akka doc不清楚如何让ExtendedActorSystem反序列化ActorRef

时间:2017-07-02 22:03:27

标签: akka akka-cluster

我正在尝试通过protobuf序列化/反序列化ActorRef。根据Akka doc,唯一的方法是将ActorRef转换为String,并在远程actor系统中将其转换回来。

文档提到使用ExtendedActorSystem进行反序列化(请参阅here)。但是,目前还不清楚如何获得ExtendedActorSystem

// Serialize
// (beneath toBinary)
val identifier: String = Serialization.serializedActorPath(theActorRef)

// Then just serialize the identifier however you like

// Deserialize
// (beneath fromBinary)
// ==== Where is this extendedSystem from? ====
val deserializedActorRef = extendedSystem.provider.resolveActorRef(identifier)
// Then just use the ActorRef

修改

我在这里找到了这个问题:Akka (JVM): Serialize an actorref with protobuf within another message,其中提到了向ActorSystem投射ExtendedActorSystem。这是正确的方法吗?它会一直有效吗?

1 个答案:

答案 0 :(得分:1)

亲爱的@stackoverflower,

每当您使用ActorSystem(...)时,它都会构建一个ActorSystemImpl的实例。

类型树如下:

ActorSystemImpl extends ExtendedActorSystem

ExtendedActorSystem implements ActorSystem

您可以使用类似

的语句

val system: ExtendedActorSystem = ActorSystem(...).asInstanceOf[ExtendedActorSystem]

访问正确的类型自动完成。不幸的是,ActorSystemImpl的范围为[akka]