2012-05-10 2 views
6

나는 Akka의 ask 패턴과 비슷한 (그러나 동일하지는 않은) 것을 만들었는데, 여기서 하나의 메시지를 처리 ​​한 다음 스스로를 죽이는 임시 액터를 인스턴스화해야합니다. 요청 당 한 번 actorOf()를 사용하여 기본 워크 플로우를 구현했지만, 매번 새로운 경로에 새 액터를 등록하기 때문에 이것이 옳다고 생각하지 않습니다.Akka에서 임시 배우를 제대로 시작하는 방법은 무엇입니까?

이 작업을 수행하는 올바른 방법은 무엇입니까?

+3

배우가 일회성 인 경우 왜 필요한가요? 미래를 이용하세요? Future ({process (msg)}) (context.dispatcher) pipeTo someOtherActor –

+0

컨텍스트에서 나는 그것을 다른 액터에게 보낸 사람으로 전달할 수 있도록 액터가 필요했습니다. 그러나 더 큰 문제는이를 요구하는 디자인 일 수 있습니다. – SoftMemes

답변

5

future을 사용해야하는 것 같습니다. 내가 아는 한, Akka 선물은 배우 창작물을 처리합니다 & 처분; 만약 당신이 flatMap 몇 가지 선물을 함께하면 일부는 동일한 배우 내에서 실행되는 반면 다른 것들은 새로운 것이 생성된다는 것을 알게 될 것입니다. 뻔뻔스럽게 문서를 바꿔 말하자면 :

import akka.japi.Function; 
import java.util.concurrent.Callable; 
import akka.dispatch.Futures; 
import akka.dispatch.OnComplete; 

Future<String> f = Futures.future(new Callable<String>() { 
    public String call() { 
    return "Hello" + "World"; 
    } 
}, system.dispatcher()).andThen(new OnComplete<String>() { 
    public void onComplete(Throwable err, String result) { 
     // do something with the err and/or result 
    } 
    }); 
}); 

위와 같은 것이 좋을 것 같습니까? 더 많은 예제를 보려면 문서를 확인하십시오 ...

@ viktor-clang은 다른 점을 알고있을 수도 있지만, 일반적인 경우에는 스폰되는 배우의 수를 특히 염려해야한다고 생각하지 않습니다. 그들은 OS 쓰레드보다 훨씬 저렴합니다.

관련 문제