2016-12-26 6 views
0

I가 다음과 같은 요구 사항동기화 AKKA 배우 가장 좋은 방법

나는 주요 작업을 완료해야

배우 A : 메시지가가 배우 B에 전달 '특별한'경우, 주요 작업을 수행합니다 처리 한 다음 작업 배우 B 완료 : 주요 작업에 대한 특별 논리적 인 작업을 수행하고 A와 B는 함께 이것을

구현

public static class ActorA extends UntypedActor { 


    public void onReceive(Object message) { 
    if (message instanceof Work) { 
    // if message is special 
ActorRef actorB = this.getContext().actorOf(Props.create(ActorB.class,)); 
       actorB.tell(new specialTask(message.property), getSelf()); 

    } else { 
     unhandled(message); 
    } 
    } 
} 
를 완료

public static class ActorB extends UntypedActor { 


     public void onReceive(Object message) { 
     if (message instanceof specialTask) { 
     //do special task using the message that does not change the state of the message 

     } else { 
      unhandled(message); 
     } 
     } 
    } 

이 ActorA는 배우 조식 작업의 완료를 의존하지 않는

배우 B. 그러나 배우 B가 완료되면 A와 B 사이를 지나가는 메시지가 없어야하는지 확실하지 않습니다. 이것이 올바른 접근 방법입니까?

+0

작동 코드가 codeview.stackexchange.com에 – GhostCat

+0

감사를 가야한다, http://codereview.stackexchange.com/questions/150871/synchronised-akka-actor-best-practice coderview.stackexchange 접수 –

+0

문제의 밤은을 기록했다. co.kr에서 계속 노력하겠습니다. 감사합니다 –

답변

0

내가 이해할 수있는 한, 액터 B를 사용하여 A에서 계산하면 안되는 것을 계산할 수 있습니다.이 경우 A가 B에 의해 생성 된 결과에 의존하지 않으면 실제로 계산이 완료되면 B에서 A로 메시지를 보내야합니다. B로 계산 한 결과 (디스크에 쓰기, 다른 서비스에 게시하기 등)로 원하는대로 할 수 있습니다.

그러나 액터 B 사서함을 오버플로하지 않으려면 Work Pulling 또는 Reactive Stream과 같은 Akka 패턴을 A의 메시지와 함께 사용하는 것이 좋습니다. 주요 아이디어는 액터 B가 작업을 요청하도록하는 것입니다.

B가 I/O/heavy work/blocking을 수행하는 경우이 액터를 분리 된 dispatcher에서 실행하는 것이 좋습니다. 그렇지 않으면 전체 시스템이 종료 될 수 있습니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 배우 B가 차단 작업을 수행하지 않습니다. 배우가 작업을 요청한다는 것을 의미하는 패턴을 가르쳐 주시겠습니까? 배우가 메시지를 보내는 방법을 묻는다면 미래가 나타날 것입니다. 그러나 부모 배우는 배우 B –

+0

님이 반환 한 결과에 신경을 쓰지 않습니다. Akka API의 요청 패턴이 아닙니다. B 액보다 빨리 액터 A가 메시지를 생성하는 경우를 고려하여 역 압력을 처리하는 또 다른 대안 인 Reactive Stream에 대한 링크와 Work Pulling 패턴에 대한 링크를 추가했습니다. 그러나 내가 볼 수있는 한 초기 디자인에는 아무런 문제가 없습니다. 방금 호출을 막고 사서함 오버플로를 처리하기 위해 분리 된 Dispatcher를 사용해야한다는 것을 알기까지 잠시 시간이 걸렸기 때문에 그 일을 지적했습니다. –

+0

메시지를받은 후 보낸 사람에게 아무런 응답이 없다는 것은 이상하게 보입니다. –