akka模型用sender可以动态指定

来源:互联网 发布:大数据舆情分析架构 编辑:程序博客网 时间:2024/06/05 00:40

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就是动态的

原创粉丝点击