Remoting for Akka Typed, #21225
* seems like it will just work when using the adapters, since it will simply delegate to the untyped RemoteActorRef * ActorRefResolver was added for upporting erialization of typed ActorRef * The ActorRef itself is not serializable with Java serialization, and we shouldn't do that
This commit is contained in:
parent
1e4e7cbba2
commit
fd11b94b1f
2 changed files with 44 additions and 1 deletions
|
|
@ -0,0 +1,43 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2017 Lightbend Inc. <http://www.lightbend.com>
|
||||||
|
*/
|
||||||
|
package akka.typed.cluster
|
||||||
|
|
||||||
|
import akka.typed.ActorSystem
|
||||||
|
import akka.typed.Extension
|
||||||
|
import akka.typed.ExtensionId
|
||||||
|
import akka.typed.ActorRef
|
||||||
|
import akka.actor.ExtendedActorSystem
|
||||||
|
|
||||||
|
object ActorRefResolver extends ExtensionId[ActorRefResolver] {
|
||||||
|
def get(system: ActorSystem[_]): ActorRefResolver = apply(system)
|
||||||
|
|
||||||
|
override def createExtension(system: ActorSystem[_]): ActorRefResolver =
|
||||||
|
new ActorRefResolver(system)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serialization and deserialization of `ActorRef`.
|
||||||
|
*/
|
||||||
|
class ActorRefResolver(system: ActorSystem[_]) extends Extension {
|
||||||
|
import akka.typed.scaladsl.adapter._
|
||||||
|
|
||||||
|
private val untypedSystem = system.toUntyped.asInstanceOf[ExtendedActorSystem]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate full String representation including the uid for the actor cell
|
||||||
|
* instance as URI fragment, replacing the Address in the RootActor Path
|
||||||
|
* with the local one unless this path’s address includes host and port
|
||||||
|
* information. This representation should be used as serialized
|
||||||
|
* representation.
|
||||||
|
*/
|
||||||
|
def toSerializationFormat[T](ref: ActorRef[T]): String =
|
||||||
|
ref.path.toSerializationFormatWithAddress(untypedSystem.provider.getDefaultAddress)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserialize an `ActorRef` in the [[#toSerializationFormat]].
|
||||||
|
*/
|
||||||
|
def resolveActorRef[T](serializedActorRef: String): ActorRef[T] =
|
||||||
|
untypedSystem.provider.resolveActorRef(serializedActorRef)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -158,7 +158,7 @@ lazy val streamTestsTck = akkaModule("akka-stream-tests-tck")
|
||||||
.dependsOn(streamTestkit % "test->test", stream)
|
.dependsOn(streamTestkit % "test->test", stream)
|
||||||
|
|
||||||
lazy val typed = akkaModule("akka-typed")
|
lazy val typed = akkaModule("akka-typed")
|
||||||
.dependsOn(testkit % "compile->compile;test->test")
|
.dependsOn(testkit % "compile->compile;test->test", cluster % "compile->compile;test->test")
|
||||||
|
|
||||||
lazy val typedTests = akkaModule("akka-typed-tests")
|
lazy val typedTests = akkaModule("akka-typed-tests")
|
||||||
.dependsOn(typed, typedTestkit % "compile->compile;test->test")
|
.dependsOn(typed, typedTestkit % "compile->compile;test->test")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue