2013-03-25 98 views
0

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

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

是否有某种方式来做到这一点,或任何其他方式增加这样的特殊路由行为?

回答

1

只需创建一个普通的演员,有routees /演员拨入和/或儿童创建你喜欢转发入站邮件。

+0

啊,是的,我明白了。谢谢! – drexin 2013-03-26 18:46:51

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 

    ... 

    } 

} 
+0

我知道,但那不是我想要的。不管怎么说,还是要谢谢你。 – drexin 2013-03-25 14:44:33

+0

那有什么问题?顺便说一句,作为演员可以来去,你的订阅机制可能是活泼的。这可能是一个问题或不是,但很好意识到。 – 2013-03-25 14:58:55

+0

感谢您的评论,Endre。我知道可能的比赛。我想把它放在路由器中的原因是,它与路由相关。 – drexin 2013-03-25 15:19:39

0

您可以使用路由器的BroadcastRouter。与其他路由器不同,如果该消息是广播消息,则该路由器将向其子节点广播每条消息。

+0

谢谢,但我只想播放特定类型的消息。 – drexin 2013-03-26 12:14:27