akka模型用sender可以动态指定

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值