2016-07-10 2 views
1

Props을 올바르게 사용하는 방법을 알려 드리지 않겠습니다. 저의 첫 번째 생각은 객체가 생성되는 액터의 일부 속성을 가지고 있다는 것입니다. 이러한 속성에는 액터의 필드 값은 물론 배포 관련 정보 (예 : 사용할 디스패처)가 포함될 수 있습니다. 나중에는 실제 배우와 아무 관련이 없으므로 독립적으로 출하되어야합니다. 액터 만들기를위한 소품 이해

그러나 the documentation에서

은 좋은 연습이 (제거 문서)와 같은 배우 내의 정적 팩토리 메소드를 사용하는 것입니다 말했다

public class DemoActor extends UntypedActor { 

    public static Props props(final int magicNumber) { 
    return Props.create(new Creator<DemoActor>() { 
     private static final long serialVersionUID = 1L; 

     @Override 
     public DemoActor create() throws Exception { 
     return new DemoActor(magicNumber); 
     } 
    }); 
    } 
} 

나는 예를 들어 우리가 하나를 사용하려면이 매우 좋지 않다 생각 이제 Dispatcher가 필요하며 향후 요구 사항이 변경 될 것입니다. 그것은 (제 의견으로는) 잘못된 Actor 클래스를 수정하게 될 것입니다.

+1

또 하나의 작고 완전히 주관적인 조언 : Akka로 시작한 분이라면 Scala를 사용한 적이 없으며 새로운 언어와 새로운 프레임 워크를 배울 필요가 없도록 Java를 사용하기로 결정했습니다. .. 그게 바로 내가 시작한 것과 지금 후회하고있는 것입니다. 완전히 논리적이지만 Scala를 목표로하는 더 많은 리소스 (공식 문서 제외)가있는 것 같습니다. 스칼라의 케이스 클래스가없는 불변의 메시지 클래스를 Java로 만들면 ... * 의심 스럽다면 스칼라를 액터 클래스와 메시지 클래스로 제한하고 Java에서 그 밖의 모든 작업을 수행하십시오. 그냥 내 의견. –

답변

1

정적 팩터 리 방법은 Java에서 매우 유용 할 수 있습니다. Java에서는 Akka를 사용하여 매우 장황한 경향이 있습니다. 표시 한 코드는 Actor 클래스 용이지만 일반적으로 반전 제어 스타일 구성 또는 부트 스트 래퍼 클래스가 있습니다. 일반적으로 액터 시스템을 설정 한 다음 ActorSystem#actorOf 클래스의 액터를 설정합니다.

이제 액터의 props 팩토리 메소드에서 기본 Props 인스턴스를 검색 한 후 당신은 (Props는 불변하지만 방법 수정 인스턴스를 반환이) 그것을 당신의 목적에 비트를 구성 할 수 있습니다. 이 단지 최소한의 코드 조각입니다 (

system.actorOf(DemoActor.props(42).withDispatcher("DemoDispatcher"), "demo-with-configured-dispatcher"); 

하지만 난 당신이 아이디어를 얻을 생각 :

ActorSystem system = ...; 
system.actorOf(DemoActor.props(42), "demo-with-default-dispatcher"); 

에 : 경우에 당신은 당신이 단지 같은 것을에서 부트 스트 래퍼 클래스를 수정합니다 다음 다른 디스패처가 필요합니다)