akka.actor.Identify Scala Examples
The following examples show how to use akka.actor.Identify.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: IdentifyFeyActors.scala From incubator-retired-iota with Apache License 2.0 | 5 votes |
package org.apache.iota.fey import akka.actor.{Actor, ActorIdentity, ActorLogging, ActorPath, Identify} import akka.routing.{ActorRefRoutee, GetRoutees, Routees} import play.api.libs.json._ import scala.collection.mutable.HashSet protected class IdentifyFeyActors extends Actor with ActorLogging { import IdentifyFeyActors._ override def receive: Receive = { case IDENTIFY_TREE(startPath) => log.info("Current Actors in system:") actorsPath = HashSet.empty rootPath = startPath log.info(startPath) self ! ActorPath.fromString(startPath) case path: ActorPath => context.actorSelection(path / "*") ! Identify(()) context.actorSelection(path / "*") ! GetRoutees case ActorIdentity(_, Some(ref)) => actorsPath.add(ref.path.toString) log.info(ref.path.toString) self ! ref.path case routees:Routees => routees.routees .map(_.asInstanceOf[ActorRefRoutee]) .foreach(routee => { log.info(routee.ref.path.toString) actorsPath.add(routee.ref.path.toString) }) case _ => } } protected object IdentifyFeyActors{ def generateTreeJson(): String = { val trie = new Trie("FEY-MANAGEMENT-SYSTEM") actorsPath.map(_.replace("user/","")).foreach(trie.append(_)) Json.stringify(trie.print) } //Static HTML content from d3 val html = scala.io.Source.fromInputStream(getClass.getResourceAsStream("/d3Tree.html"), "UTF-8") .getLines() .mkString("\n") def getHTMLTree(json: String): String = { html.replace("$MYJSONHIERARCHY", json) } }
Example 2
Source File: BaseAkkaSpec.scala From incubator-retired-iota with Apache License 2.0 | 5 votes |
package org.apache.iota.fey import java.nio.file.Paths import akka.actor.{ActorIdentity, ActorRef, ActorSystem, Identify, Props} import akka.testkit.{EventFilter, TestEvent, TestProbe} import com.typesafe.config.ConfigFactory import org.scalatest.BeforeAndAfterAll import play.api.libs.json._ import scala.concurrent.duration.{DurationInt, FiniteDuration} import scala.concurrent.Await class BaseAkkaSpec extends BaseSpec with BeforeAndAfterAll with LoggingTest{ //Load default configuration for Fey when running tests resetCapturedLogs() CONFIG.loadUserConfiguration(Paths.get(TestSetup.configTest.toURI()).toFile().getAbsolutePath) TestSetup.setup() val systemName = "FEY-TEST" implicit val system = ActorSystem(systemName, ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]""")) system.eventStream.publish(TestEvent.Mute(EventFilter.debug())) system.eventStream.publish(TestEvent.Mute(EventFilter.info())) system.eventStream.publish(TestEvent.Mute(EventFilter.warning())) system.eventStream.publish(TestEvent.Mute(EventFilter.error())) val globalIdentifierName = "GLOBAL-IDENTIFIER" val globalIdentifierRef = system.actorOf(Props[IdentifyFeyActors],globalIdentifierName) override protected def afterAll(): Unit = { //Force reload of GenericActor's jar Utils.loadedJars.remove("fey-test-actor.jar") Monitor.events.removeAllNodes() Await.ready(system.terminate(), 20.seconds) } implicit class TestProbeOps(probe: TestProbe) { def expectActor(path: String, max: FiniteDuration = 3.seconds): ActorRef = { probe.within(max) { var actor = null: ActorRef probe.awaitAssert { (probe.system actorSelection path).tell(Identify(path), probe.ref) probe.expectMsgPF(100 milliseconds) { case ActorIdentity(`path`, Some(ref)) => actor = ref } } actor } } def expectActorInSystem(path: String, lookInSystem: ActorSystem, max: FiniteDuration = 3.seconds): ActorRef = { probe.within(max) { var actor = null: ActorRef probe.awaitAssert { (lookInSystem actorSelection path).tell(Identify(path), probe.ref) probe.expectMsgPF(100 milliseconds) { case ActorIdentity(`path`, Some(ref)) => actor = ref } } actor } } def verifyActorTermination(actor: ActorRef)(implicit system: ActorSystem): Unit = { val watcher = TestProbe() watcher.watch(actor) watcher.expectTerminated(actor) } def notExpectActor(path: String, max: FiniteDuration = 3.seconds): Unit = { probe.within(max) { probe.awaitAssert { (probe.system actorSelection path).tell(Identify(path), probe.ref) probe.expectMsgPF(100 milliseconds) { case ActorIdentity(`path`, None) => } } } } def isThreadRunning(threadName: String): Boolean = { Thread.getAllStackTraces.keySet().toArray .map(_.asInstanceOf[Thread]) .find(_.getName == threadName) match { case Some(thread) => if(thread.isAlive) true else false case None => false } } } //Utils Functions def getJSValueFromString(json: String): JsValue = { Json.parse(json) } }
Example 3
Source File: RemoteLookupProxy.scala From 006877 with MIT License | 5 votes |
package com.goticks import akka.actor._ import akka.actor.ActorIdentity import akka.actor.Identify import scala.concurrent.duration._ class RemoteLookupProxy(path: String) extends Actor with ActorLogging { context.setReceiveTimeout(3 seconds) sendIdentifyRequest() def sendIdentifyRequest(): Unit = { val selection = context.actorSelection(path) selection ! Identify(path) } def receive = identify def identify: Receive = { case ActorIdentity(`path`, Some(actor)) => context.setReceiveTimeout(Duration.Undefined) log.info("switching to active state") context.become(active(actor)) context.watch(actor) case ActorIdentity(`path`, None) => log.error(s"Remote actor with path $path is not available.") case ReceiveTimeout => sendIdentifyRequest() case msg: Any => log.error(s"Ignoring message $msg, remote actor is not ready yet.") } def active(actor: ActorRef): Receive = { case Terminated(actorRef) => log.info(s"Actor $actorRef terminated.") log.info("switching to identify state") context.become(identify) context.setReceiveTimeout(3 seconds) sendIdentifyRequest() case msg: Any => actor forward msg } }
Example 4
Source File: ClusterSpec.scala From akka-cqrs with Apache License 2.0 | 5 votes |
package test.support import java.io.{File, IOException} import java.nio.file._ import java.nio.file.attribute.BasicFileAttributes import akka.actor.{ActorIdentity, Identify, Props} import akka.cluster.Cluster import akka.persistence.Persistence import akka.persistence.journal.leveldb.{SharedLeveldbJournal, SharedLeveldbStore} import akka.remote.testconductor.RoleName import akka.remote.testkit.MultiNodeSpec import akka.testkit.ImplicitSender import scala.util.control.NonFatal abstract class ClusterSpec extends MultiNodeSpec(ClusterConfig) with SbtMultiNodeSpec with ImplicitSender { import ClusterConfig._ implicit val logger = system.log def initialParticipants = roles.size def deleteDirectory(path: Path): Unit = if (Files.exists(path)) { Files.walkFileTree(path, new SimpleFileVisitor[Path] { def deleteAndContinue(file: Path): FileVisitResult = { Files.delete(file) FileVisitResult.CONTINUE } override def visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult = deleteAndContinue(file) override def visitFileFailed(file: Path, exc: IOException): FileVisitResult = deleteAndContinue(file) override def postVisitDirectory(dir: Path, exc: IOException): FileVisitResult = { Option(exc).fold(deleteAndContinue(dir)) { case NonFatal(e) => throw e } } }) } val storageLocations = List( "akka.persistence.journal.leveldb.dir", "akka.persistence.journal.leveldb-shared.store.dir", "akka.persistence.snapshot-store.local.dir").map(s => new File(system.settings.config.getString(s))) override protected def atStartup() { on(node1) { storageLocations.foreach(dir => deleteDirectory(dir.toPath)) } } override protected def afterTermination() { on(node1) { storageLocations.foreach(dir => deleteDirectory(dir.toPath)) } } def join(startOn: RoleName, joinTo: RoleName) { on(startOn) { Cluster(system) join node(joinTo).address } enterBarrier(startOn.name + "-joined") } def setupSharedJournal() { Persistence(system) on(node1) { system.actorOf(Props[SharedLeveldbStore], "store") } enterBarrier("persistence-started") system.actorSelection(node(node1) / "user" / "store") ! Identify(None) val sharedStore = expectMsgType[ActorIdentity].ref.get SharedLeveldbJournal.setStore(sharedStore, system) enterBarrier("after-1") } def joinCluster() { join(startOn = node1, joinTo = node1) join(startOn = node2, joinTo = node1) enterBarrier("after-2") } def on(nodes: RoleName*)(thunk: => Unit): Unit = { runOn(nodes: _*)(thunk) } }
Example 5
Source File: Remoting.scala From spark1.52 with Apache License 2.0 | 5 votes |
package ch8 import org.learningconcurrency._ import ch8._ import akka.actor.Actor import akka.actor.ActorIdentity import akka.actor.ActorSelection.toScala import akka.actor.Identify import akka.actor.Props import akka.actor.actorRef2Scala import akka.event.Logging object RemotingPongySystem extends App { val system = remotingSystem("PongyDimension", 24321) val pongy = system.actorOf(Props[Pongy], "pongy") Thread.sleep(15000) system.shutdown() } class Runner extends Actor { val log = Logging(context.system, this) val pingy = context.actorOf(Props[Pingy], "pingy") def receive = { case "start" => val path = context.actorSelection("akka.tcp://[email protected]:24321/user/pongy") path ! Identify(0) case ActorIdentity(0, Some(ref)) => pingy ! ref case ActorIdentity(0, None) => log.info("Something's wrong -- no pongy anywhere!") context.stop(self) case "pong" => log.info("got a pong from another dimension.") context.stop(self) } } object RemotingPingySystem extends App { val system = remotingSystem("PingyDimension", 24567) val runner = system.actorOf(Props[Runner], "runner") runner ! "start" Thread.sleep(5000) system.shutdown() }
Example 6
Source File: BaseAkkaSpec.scala From reactive-application-development-scala with Apache License 2.0 | 5 votes |
package com.rarebooks.library import akka.actor.{ ActorIdentity, ActorRef, ActorSystem, Identify } import akka.testkit.{ EventFilter, TestEvent, TestProbe } import org.scalatest.BeforeAndAfterAll import scala.concurrent.Await import scala.concurrent.duration.{ DurationInt, FiniteDuration } abstract class BaseAkkaSpec(actorSystemName: String) extends BaseSpec with BeforeAndAfterAll { implicit class TestProbeOps(probe: TestProbe) { def expectActor(path: String, max: FiniteDuration = 3.seconds): ActorRef = { probe.within(max) { var actor = null: ActorRef probe.awaitAssert { (probe.system actorSelection path).tell(Identify(path), probe.ref) probe.expectMsgPF(100 milliseconds) { case ActorIdentity(`path`, Some(ref)) => actor = ref } } actor } } } implicit val system = ActorSystem(actorSystemName) system.eventStream.publish(TestEvent.Mute(EventFilter.debug())) system.eventStream.publish(TestEvent.Mute(EventFilter.info())) system.eventStream.publish(TestEvent.Mute(EventFilter.warning())) system.eventStream.publish(TestEvent.Mute(EventFilter.error())) override protected def afterAll(): Unit = { Await.ready(system.terminate(), 20.seconds) } }
Example 7
Source File: StopAndStartCubeSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import java.util.concurrent.TimeUnit import akka.actor.{ActorIdentity, ActorSystem, Identify} import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.squbs.lifecycle.GracefulStop import scala.util.Try object StopAndStartCubeSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPaths = Array( "DummyCube", "DummyCubeSvc", "DummySvc" ) map (dummyJarsDir + "/" + _) val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = StopAndStartCubeSpec | ${JMX.prefixConfig} = true |} |default-listener.bind-port = 0 """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class StopAndStartCubeSpec extends TestKit(StopAndStartCubeSpec.boot.actorSystem) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { implicit val timeout: akka.util.Timeout = Try(System.getProperty("test.timeout").toLong) map { millis => akka.util.Timeout(millis, TimeUnit.MILLISECONDS) } getOrElse Timeouts.askTimeout import Timeouts.awaitMax override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Unicomplex" should "be able to stop a cube" in { Unicomplex(system).uniActor ! StopCube("DummyCube") within(awaitMax) { expectMsg(Ack) } system.actorSelection("/user/DummyCube") ! Identify("hello") within(awaitMax) { val id = expectMsgType[ActorIdentity] id.ref should be(None) } } "Unicomplex" should "not be able to stop a stopped cube" in { Unicomplex(system).uniActor ! StopCube("DummyCube") expectNoMessage() } "Unicomplex" should "be able to start a cube" in { Unicomplex(system).uniActor ! StartCube("DummyCube") within(awaitMax) { expectMsg(Ack) } system.actorSelection("/user/DummyCube") ! Identify("hello") within(awaitMax) { val id = expectMsgType[ActorIdentity] id.ref should not be None } } "Unicomplex" should "not be able to start a running cube" in { Unicomplex(system).uniActor ! StartCube("DummyCube") expectNoMessage() } }
Example 8
Source File: Sender.scala From fusion-data with Apache License 2.0 | 5 votes |
package sample.remote.benchmark import akka.actor.{ Actor, ActorIdentity, ActorRef, ActorSystem, Identify, Props, ReceiveTimeout, Terminated } import com.typesafe.config.ConfigFactory import scala.concurrent.duration._ class Sender(path: String, totalMessages: Int, burstSize: Int, payloadSize: Int) extends Actor { import Sender._ val payload: Array[Byte] = Vector.fill(payloadSize)("a").mkString.getBytes println(s"payload bytes: ${payload.length}") var startTime = 0L var maxRoundTripMillis = 0L context.setReceiveTimeout(3.seconds) // 设置Actor自身接收消息超时时长 sendIdentifyRequest() // 发请求确认远程actor的路径是否有效。 override def receive: Receive = identifying def identifying: Receive = { case ActorIdentity(`path`, Some(actor)) => context.watch(actor) context.become(active(actor)) context.setReceiveTimeout(Duration.Undefined) // 重置超时时间 self ! Warmup case ActorIdentity(`path`, None) => println(s"远程actor无效:$path") case ReceiveTimeout => sendIdentifyRequest() // 超时,再次确认远程actor是否有效 } def active(actor: ActorRef): Receive = { case Warmup => // 热身,不计入统计 sendBatch(actor, burstSize) actor ! Start case Start => println(s"启动基准测试一共 $totalMessages 消息,分帧大小 $burstSize,有效负载 $payloadSize") startTime = System.nanoTime() val remaining = sendBatch(actor, totalMessages) if (remaining == 0) actor ! Done else actor ! Continue(remaining, startTime, startTime, burstSize) case c @ Continue(remaining, t0, t1, n) => val now = System.nanoTime() val duration = (now - t0).nanos.toMillis // 从发出 Continue 指令到收到指令回复花费的时间 val roundTripMillis = (now - t1).nanos.toMillis maxRoundTripMillis = math.max(maxRoundTripMillis, roundTripMillis) if (duration >= 500) { // 以500ms为间隔作统计 val throughtput = (n * 1000.0 / duration).toInt println(s"花费 ${duration}ms 发送了 $n 条消息,吞吐量 ${throughtput}msg/s,") } val nextRemaining = sendBatch(actor, remaining) if (nextRemaining == 0) actor ! Done else if (duration >= 500) // 一个批次的数量已发完 actor ! Continue(nextRemaining, now, now, burstSize) else // 间隔时间不足500ms,更新 剩余数量、(分帧)起始时间、分帧发送数量 actor ! c.copy(remaining = nextRemaining, burstStartTime = now, n = n + burstSize) case Done => val took = (System.nanoTime - startTime).nanos.toMillis val throughtput = (totalMessages * 1000.0 / took).toInt println( s"一共花费 ${took}ms 发送了 ${totalMessages}消息, 吞吐量 ${throughtput}msg/s, " + s"最大往返时间 ${maxRoundTripMillis}ms, 分帧数据大小 $burstSize, " + s"有效负载 $payloadSize") actor ! Shutdown case Terminated(`actor`) => println("Receiver terminated") context.system.terminate() } case class Continue(remaining: Int, startTime: Long, burstStartTime: Long, n: Int) extends Echo def main(args: Array[String]): Unit = { val system = ActorSystem("Sys", ConfigFactory.load("calculator")) val remoteHostPort = if (args.nonEmpty) args(0) else "127.0.0.1:2553" val remotePath = s"akka.tcp://Sys@$remoteHostPort/user/rcv" val totalMessages = if (args.length >= 2) args(1).toInt else 500000 val burstSize = if (args.length >= 3) args(2).toInt else 5000 val payloadSize = if (args.length >= 4) args(3).toInt else 100 system.actorOf(Sender.props(remotePath, totalMessages, burstSize, payloadSize), "snd") } def props(path: String, totalMessages: Int, burstSize: Int, payloadSize: Int) = Props(new Sender(path, totalMessages, burstSize, payloadSize)) }
Example 9
Source File: HostSlaveActor.scala From speedo with Apache License 2.0 | 5 votes |
package com.htc.speedo.akka import akka.actor.{ Actor, ActorIdentity, ActorLogging, Identify } import com.twitter.scalding.Args val workerCount = args.int("worker", 1) // Tries to identify if the master exists context.actorSelection(masterPath) ! Identify(masterPath) override def receive = { // If found master actor, join case ActorIdentity(`masterPath`, Some(master)) => // Each join message will create a worker actor (1 to workerCount).foreach(_ => master ! Join) // If not found master actor, log and exit case ActorIdentity(`masterPath`, None) => log.error(s"Cannot found master at $masterPath, stopping!") context.system.shutdown // stop slave akka system case StopAkka => context.system.shutdown } }