|
Akka/Scala example source code file (RemoteRouterSpec.scala)
The RemoteRouterSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.remote import akka.testkit._ import akka.routing._ import akka.actor._ import akka.remote.routing._ import com.typesafe.config._ object RemoteRouterSpec { class Echo extends Actor { def receive = { case _ ⇒ sender() ! self } } } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) class RemoteRouterSpec extends AkkaSpec(""" akka.actor.provider = "akka.remote.RemoteActorRefProvider" akka.remote.netty.tcp { hostname = localhost port = 0 } akka.actor.deployment { /remote-override { router = round-robin-pool nr-of-instances = 4 } }""") { import RemoteRouterSpec._ val port = system.asInstanceOf[ExtendedActorSystem].provider.getDefaultAddress.port.get val sysName = system.name val conf = ConfigFactory.parseString( s""" akka { actor.deployment { /blub { router = round-robin-pool nr-of-instances = 2 target.nodes = ["akka.tcp://${sysName}@localhost:${port}"] } /elastic-blub { router = round-robin-pool resizer { lower-bound = 2 upper-bound = 3 } target.nodes = ["akka.tcp://${sysName}@localhost:${port}"] } /remote-blub { remote = "akka.tcp://${sysName}@localhost:${port}" router = round-robin-pool nr-of-instances = 2 } /local-blub { remote = "akka://MasterRemoteRouterSpec" router = round-robin-pool nr-of-instances = 2 target.nodes = ["akka.tcp://${sysName}@localhost:${port}"] } /local-blub2 { router = round-robin-pool nr-of-instances = 4 target.nodes = ["akka.tcp://${sysName}@localhost:${port}"] } } }""").withFallback(system.settings.config) val masterSystem = ActorSystem("Master" + sysName, conf) override def afterTermination() { shutdown(masterSystem) } "A Remote Router" must { "deploy its children on remote host driven by configuration" in { val probe = TestProbe()(masterSystem) val router = masterSystem.actorOf(RoundRobinPool(2).props(Props[Echo]), "blub") val replies = for (i ← 1 to 5) yield { router.tell("", probe.ref) probe.expectMsgType[ActorRef].path } val children = replies.toSet children should have size 2 children.map(_.parent) should have size 1 children foreach (_.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}")) masterSystem.stop(router) } "deploy its children on remote host driven by programatic definition" in { val probe = TestProbe()(masterSystem) val router = masterSystem.actorOf(new RemoteRouterConfig(RoundRobinPool(2), Seq(Address("akka.tcp", sysName, "localhost", port))).props(Props[Echo]), "blub2") val replies = for (i ← 1 to 5) yield { router.tell("", probe.ref) probe.expectMsgType[ActorRef].path } val children = replies.toSet children should have size 2 children.map(_.parent) should have size 1 children foreach (_.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}")) masterSystem.stop(router) } "deploy dynamic resizable number of children on remote host driven by configuration" in { val probe = TestProbe()(masterSystem) val router = masterSystem.actorOf(FromConfig.props(Props[Echo]), "elastic-blub") val replies = for (i ← 1 to 5000) yield { router.tell("", probe.ref) probe.expectMsgType[ActorRef].path } val children = replies.toSet children.size should be >= 2 children.map(_.parent) should have size 1 children foreach (_.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}")) masterSystem.stop(router) } "deploy remote routers based on configuration" in { val probe = TestProbe()(masterSystem) val router = masterSystem.actorOf(FromConfig.props(Props[Echo]), "remote-blub") router.path.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}") val replies = for (i ← 1 to 5) yield { router.tell("", probe.ref) probe.expectMsgType[ActorRef].path } val children = replies.toSet children should have size 2 val parents = children.map(_.parent) parents should have size 1 parents.head should be(router.path) children foreach (_.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}")) masterSystem.stop(router) } "deploy remote routers based on explicit deployment" in { val probe = TestProbe()(masterSystem) val router = masterSystem.actorOf(RoundRobinPool(2).props(Props[Echo]) .withDeploy(Deploy(scope = RemoteScope(AddressFromURIString(s"akka.tcp://${sysName}@localhost:${port}")))), "remote-blub2") router.path.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}") val replies = for (i ← 1 to 5) yield { router.tell("", probe.ref) probe.expectMsgType[ActorRef].path } val children = replies.toSet children should have size 2 val parents = children.map(_.parent) parents should have size 1 parents.head should be(router.path) children foreach (_.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}")) masterSystem.stop(router) } "let remote deployment be overridden by local configuration" in { val probe = TestProbe()(masterSystem) val router = masterSystem.actorOf(RoundRobinPool(2).props(Props[Echo]) .withDeploy(Deploy(scope = RemoteScope(AddressFromURIString(s"akka.tcp://${sysName}@localhost:${port}")))), "local-blub") router.path.address.toString should be("akka://MasterRemoteRouterSpec") val replies = for (i ← 1 to 5) yield { router.tell("", probe.ref) probe.expectMsgType[ActorRef].path } val children = replies.toSet children should have size 2 val parents = children.map(_.parent) parents should have size 1 parents.head.address should be(Address("akka.tcp", sysName, "localhost", port)) children foreach (_.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}")) masterSystem.stop(router) } "let remote deployment router be overridden by local configuration" in { val probe = TestProbe()(masterSystem) val router = masterSystem.actorOf(RoundRobinPool(2).props(Props[Echo]) .withDeploy(Deploy(scope = RemoteScope(AddressFromURIString(s"akka.tcp://${sysName}@localhost:${port}")))), "local-blub2") router.path.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}") val replies = for (i ← 1 to 5) yield { router.tell("", probe.ref) probe.expectMsgType[ActorRef].path } val children = replies.toSet children should have size 4 val parents = children.map(_.parent) parents should have size 1 parents.head should be(router.path) children foreach (_.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}")) masterSystem.stop(router) } "let remote deployment be overridden by remote configuration" in { val probe = TestProbe()(masterSystem) val router = masterSystem.actorOf(RoundRobinPool(2).props(Props[Echo]) .withDeploy(Deploy(scope = RemoteScope(AddressFromURIString(s"akka.tcp://${sysName}@localhost:${port}")))), "remote-override") router.path.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}") val replies = for (i ← 1 to 5) yield { router.tell("", probe.ref) probe.expectMsgType[ActorRef].path } val children = replies.toSet children should have size 4 val parents = children.map(_.parent) parents should have size 1 parents.head should be(router.path) children foreach (_.address.toString should be(s"akka.tcp://${sysName}@localhost:${port}")) masterSystem.stop(router) } "set supplied supervisorStrategy" in { val probe = TestProbe()(masterSystem) val escalator = OneForOneStrategy() { case e ⇒ probe.ref ! e; SupervisorStrategy.Escalate } val router = masterSystem.actorOf(new RemoteRouterConfig( RoundRobinPool(1, supervisorStrategy = escalator), Seq(Address("akka.tcp", sysName, "localhost", port))).props(Props.empty), "blub3") router.tell(GetRoutees, probe.ref) EventFilter[ActorKilledException](occurrences = 1).intercept { probe.expectMsgType[Routees].routees.head.send(Kill, testActor) }(masterSystem) probe.expectMsgType[ActorKilledException] } } } Other Akka source code examplesHere is a short list of links related to this Akka RemoteRouterSpec.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.