В документе Akka неясно, как заставить ExtendedActorSystem десериализовать ActorRef.

Я пытаюсь сериализовать/десериализовать ActorRef через protobuf. Согласно документу Akka, единственный способ сделать это — преобразовать ActorRef в String и преобразовать его обратно в систему удаленного актера.

В документе упоминается использование ExtendedActorSystem для десериализации (см. здесь ). Однако неясно, как получить 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): сериализуйте ссылку на актера с помощью protobuf в другом сообщении, в котором упоминается приведение ActorSystem к ExtendedActorSystem. Это правильный подход? Всегда ли это будет работать?


person stackoverflower    schedule 02.07.2017    source источник
comment
Тоже очень любопытно по этому поводу   -  person acjay    schedule 30.05.2018
comment
Эй, @stackverflow, ты нашел решение для правильного подхода ExtendedActorSystem?   -  person Harmeet Singh Taara    schedule 27.03.2019


Ответы (1)


дорогой @stackoverflower,

всякий раз, когда вы используете ActorSystem(...), он создает экземпляр ActorSystemImpl.

Дерево типов выглядит так:

ActorSystemImpl extends ExtendedActorSystem

и

ExtendedActorSystem implements ActorSystem

вы можете использовать такие утверждения, как

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

для доступа к правильному типу автозаполнения. ActorSystemImpl, к сожалению, ограничен [akka].

person SourceCodeBot    schedule 23.01.2020