2014-04-27 4 views
4

저는 스칼라의 Akka 배우를 기반으로하는 매우 간단한 구조를 가지고 있습니다.하지만 전달되지 않은 메시지에 대한 경고를 계속받습니다. 이 메인 클래스의 코드이며, 콜렉터가 별도의 클래스 연장 행위자 : 메시지 콜렉터로 전달되지 않는Akka Scala 배우의 데드 레터

object Executor extends App { 

    class ExecutorMaster extends Actor { 

    def receive() = { 
     case _ => Executor.actorSystem.actorOf(Props[Collector], name = "Collector") ! true 
    } 

    } 

    val actorSystem = ActorSystem("ReadScheduler") 
    private val app = actorSystem.actorOf(Props[ExecutorMaster], name = "Executor") 

    app ! true 

} 

코드에 대한 결과는 다음과

[04/0135 : 0 : 05.518] [ReadScheduler-akka.actor.default-dispatcher-3] [akka : // ReadScheduler/user/Collector] 메시지 [java.lang.Boolean]/ReadScheduler/user/Executor # 2127791644]에서 액터 [akka : // ReadScheduler/user/Collector # 337715308]가 이 아닙니다. [1] 죽은 글자가 있습니다. 이 로깅은 구성 설정 'akka.log-dead-letters' 및 'akka.log-dead-letters-during-shutdown'을 사용하여 을 해제하거나 조정할 수 있습니다.

메시지 배달이 실패한 이유는 무엇입니까? 내가 누락 된 개념이 있습니까?

답변

3

ExecutorMaster의 하위 항목으로 Collector을 실행하면 계층 구조를 사용해야합니다.

receive 메서드 내에서 수행중인 작업은 ExecutorMaster이받는 첫 번째 메시지 이후에 생성되는 다른 것과 동일한 이름을 가진 액터를 만드는 것입니다.

하여 사용하는 것이 좋습니다 :

val collector = context.actorOf(Props[Collector], name = "Collector") 
def receive = { 
    case _ => collector ! true 
} 

또한 true의 의미를 식별 할 수 case object 아닌 원시적를 사용해야한다.

관련 문제