package exam
import akka.actor.Actor
import akka.actor.ActorLogging
import akka.actor.ActorSystem
import akka.actor.Props
import akka.util.duration._
import akka.actor.ReceiveTimeout
import akka.event.LoggingReceive
import com.typesafe.config.ConfigFactory
class ActorTest extends Actor with ActorLogging {
context.setReceiveTimeout(15 seconds)
def receive = LoggingReceive {
case ("a","b",c:Map[_,_]) =>
val a = c.asInstanceOf[Map[String, String]]
log.info(self.path.name)
val ac = context.actorOf(Props[ActorBTest],name="ab")
ac.tell("zlj")
case ReceiveTimeout =>
log.error("Shutting down due to unavailable service")
context.system.shutdown()
case B =>
log.info(B.getClass().getName())
case _ =>
log.info("-----------")
}
}
case object B
class ActorBTest extends Actor with ActorLogging {
def receive = LoggingReceive {
case msg:String =>
log.info("==========msg========" + sender)
sender ! "111"
}
}
object A extends App {
val config = ConfigFactory.parseString("""
akka.logLevel = DEBUG
akka.actor.debug {
receive = on
}
""")
val system = ActorSystem("MySystem",config)
val at = system.actorOf(Props(new ActorTest), name = "ac")
val m = Map("1"->"zlj")
at ! ("a","b",m)
at ! B
}
ac.tell("xxx")这个方法中可以指定某一个actorref,这样的话ActorBTest中的sender就是动态的