0

在我的应用程序中,我必须向可能是也可能不是路由器的参与者发送订阅消息。如果它们是路由器,则必须将消息发送到所有路由。Broadcast在这里不适用,因为演员可能不是路由器,我不想Broadcast在演员接收块内处理消息。我也不想创建自定义路由器,因为路由器可以是任何类型。所以我想做的是这样的:

system.actorOf(Props[MyActor].withRouter(FromConfig().withRoute { routeeProvider => {
  case (sender, Subscribe) => routeeProvider.routees.map(Destination(sender, _))
}}))

有没有办法做到这一点,或者任何其他方式来添加这样的特殊路由行为?

4

3 回答 3

2

您可以为所有参与者定义一个父抽象类,您可以在其中处理所有需要的特殊消息并从中继承所有非路由器参与者。像这样的东西:

abstract class MyActor extends Actor {

  protected def receiveMsg: Receive // will substitute "receive" in your actors

  def receive = receiveMsg orElse {

    case Broadcast(msg) => self ! msg

    ...

  }

}
于 2013-03-25T14:41:43.193 回答
1

只需创建一个普通演员,让路由/演员拨入和/或创建为孩子,并根据需要转发入站消息。

于 2013-03-26T16:51:57.257 回答
0

您可以将BroadcastRouter用于您的路由器。与仅在消息是广播消息时才广播的其他路由器不同,此路由器会将每条消息广播给其子级。

于 2013-03-26T10:01:43.310 回答