将Router routee替换为相同类型的Actor

时间:2016-11-08 17:12:53

标签: scala akka

我正在使用akka.routing.Router演员向不同类型的演员广播Work。我使用akka.routing.BroadcastRoutingLogic来表达这种行为。 Router包含每种类型的单个参与者(Type1Actor执行作业1 WorkType2Actor作业2使用相同的Work ...)。

当演员被终止(无论怎样)时,我会收到:

def receive = {
 //...
 case Terminated(a) => //HERE DO SOMETHING
}

我想更新我的路线,以便始终保持相同数量的活跃​​演员并拥有相同数量的活动演员。 Terminated演员的类型很重要:我不希望两个同一类型的演员完成两次作业,我不希望作演不由演员TypeXActor完成

有没有办法从已终止的引用(Props这里)检索相应的a?如果不是我的选择?

1 个答案:

答案 0 :(得分:1)

为您的员工命名

为您的工作人员命名,然后检索名称以确定演员的类型

val router: ActorRef =
  context.actorOf(BroadcastPool(5).props(Props(new Worker(), "worker-type1")), "router")

内幕路由器

case Terminated(actorRef) =>
  actorRef.path.name match {
    case "type1" => //add type1 worker
    case "type2" => //add type2 worker
    case _ => //ignore
  }