首页 > 解决方案 > 根据收到的消息 ID 创建子 Actor

问题描述

父actor根据接收到的消息中的身份创建一个子actor,相同的消息ID会复用子actor。我应该怎么办?我现在正在使用这种方式。

override def receive: Receive = {
    case location: DeviceLocationInfo =>
       log.info(s"$location")
     val settings = CacheBasicAlarmSettingInRedis(system)
       .memoizeInRedisBasicAlarmSetting(location.deviceId)
     settings foreach { setting =>
      val actorRef = context.child(location.deviceId)
        .getOrElse(context.actorOf(Props(new OverSpeedAlarm),location.deviceId))
      actorRef ! location
     }

    case _ =>
  }

标签: akka

解决方案


我一直使用类似的模式。有一个使用设备 ID 作为键和一个 ActorRef 作为值的 Map ——如果地图中没有给定设备 ID 的条目,则创建一个新的孩子;如果有给定设备 ID 的条目,则将消息转发给孩子。


推荐阅读