2013-03-25 119 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