어떤 액터는 다음과 같은 세 가지 동작을 수행한다.
- 메시지 수신
- 메시지 송신
- 다른 액터를 만든다
액터시스템에서 tell 메서드를 이용해서 메시지를 전달하는 것은 철저하게 비동기적이다. tell 메서드를 호출하면 메시지가 실제로 목적지에 도달하는가 여부와 무관하게 즉시 리턴되기 때문이다.
SupervisorStrategy
- Resume
- Restart
- stop
new Procedure -> become()
Java8에서 병렬처리 : stream() 대신 parallelStreaM() 사용
Akka에서 병렬처리 Router
Java8 CompletableFuture 퓨쳐
Akka에서 퓨쳐 사용 예시Timeout timeout = new Timeout(Duration.create(5, "seconds")); Future<Object> future = Patterns.ask(actor, msg, timeout); String result = (String) Await.result(future, timeout.duration()); //동기로 쓰레드가 기다림
우리가 메시지를 보내고자 하는 목적지에 해당하는 액터는 ask 메서드에게 인수로 전달된다. 보내려는 메시지와 타임아웃 객체도 인수로 전달된다. Await.result 호출은 현재 스레드가 그 자리에서 답변을 기다리게 만든다. 블로킹 호출이다.
public NobblockingActor() {
child = context().actorOff(Props.create(CalculationActor.class), "calculationActor");
ec = context().system().dispatcher();
}
Future<Object> future = Patterns.ask(child, message, timeout);
//
future.onSuccess(new SaySuccess<Object>(), ec);
future.onComplete(new SayComplete<Object>(), ec);
future.onFailure(new SayFailure<Object>(), ec);
public final class SaySuccess<T> extends OnSuccess<T> {
@Override public final void onSuccess(T result) {
log.info("Succeeded with " + result);
}
}
child Actor로 향하는 message를 timeout과 함께 보냈다. 비동기적으로 동작하며 callback과 유사한 방식으로 동작이 끝나고 메시지를 받으면 상황에 맞게 nonblocking 함수 (onSuccess, onComplete, onFailure중 하나)를 실행한다.