【问题标题】:Sending a message to all actors within an ActorSystem向 ActorSystem 中的所有参与者发送消息
【发布时间】:2013-02-15 20:33:20
【问题描述】:

是否可以向演员系统中的所有演员发送消息?我一直在看Broadcast router 的例子,但那太微不足道了,我无法理解如何动态地将参与者添加到路由器。

我们将 scala 用于 akka。

谢谢!

【问题讨论】:

    标签: scala akka


    【解决方案1】:
    system.actorSelection("/user/*") ! msg
    

    选择监护人的所有孩子并向他们发送消息。

    【讨论】:

    • 问题是关于发送给所有演员,而不仅仅是根的孩子。那么根的孙子(/...)呢?
    【解决方案2】:

    如果要向所有动态创建的actor发送消息,可以使用eventBus

    我个人将 system.eventStream 用于我的案例。

    从一个演员,你可以发送给每个人:

    context.system.eventStream.publish(StatisticsMessage())
    

    或直接使用系统。

    演员必须订阅:

    context.system.eventStream.subscribe
    

    我从:

    trait SubscriberActor extends Actor {
    
      def subscribedClasses: Seq[Class[_]]
    
      override def preStart() {
        super.preStart()
        subscribedClasses.foreach(this.context.system.eventStream.subscribe(this.self, _))
      }
    
      override def postStop() {
        subscribedClasses.foreach(this.context.system.eventStream.unsubscribe(this.self, _))
        super.postStop()
      }
    }
    

    【讨论】:

    • 谢谢twillouer!我也一直在考虑这个问题,但我真的错过了很好的例子。
    • 1.可能在postStop 你需要“取消订阅”; 2. 致电super.postStop()之前取消订阅可能是一个更好的主意。
    猜你喜欢
    • 2019-11-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多