2013-03-25 5 views
0

내 응용 프로그램에서는 라우터가 아닐 수도있는 액터에 가입 메시지를 보내야합니다. 라우터 인 경우 모든 경로로 메시지를 보내야합니다. 액터가 라우터가 아니 어서 액터 수신 블록 안에있는 Broadcast 메시지를 처리하고 싶지 않기 때문에 여기서는 Broadcast을 사용할 수 없습니다. 라우터는 모든 유형이 될 수 있기 때문에 맞춤형 라우터를 만들고 싶지 않습니다.akka 라우터에 경로/특수 메시지 추가

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

이 작업을 수행 할 수있는 방법, 또는 같은 특별한 라우팅 동작을 추가 할 수있는 다른 방법이 있나요 :이 같은 그래서 내가 뭘하고 싶은입니까?

답변

1

정상적인 액터를 만들거나, 경로/액터를 다이얼 인 및/또는 자식으로 생성하고 원하는대로 인바운드 메시지를 전달하십시오.

+0

아, 그래 알겠습니다. 고맙습니다! – drexin

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

+0

그게 뭐가 잘못 되었 니? Btw, 배우들이 올 수 있고 갈 수 있기 때문에 구독 메커니즘이 잠재적으로 불투명 할 수 있습니다. 이것은 문제가 될 수도 있고 아닐 수도 있지만, 잘 알고 있어야합니다. –

+0

의견을 보내 주셔서 감사합니다. Endre. 나는 가능한 경주를 알고있다. 내가 이것을 라우터에 넣고 싶은 이유는 라우팅과 관련이 있기 때문입니다. – drexin

0

당신은 라우터에 대한 BroadcastRouter를 사용할 수 있습니다. 메시지가 브로드 캐스트 메시지 인 경우에만 브로드 캐스팅하는 다른 라우터와 달리이 라우터는 모든 메시지를 해당 자식에게 브로드 캐스트합니다.

+0

고마워,하지만 난 단지 특정 유형의 메시지를 방송하고 싶어. – drexin

관련 문제