Akka:Actor
akka의 Actor에 대하여 정리.
Troubleshooting
Props IllegalArgumentException
Props에서 IllegalArgumentException이 발생할 경우가 있다.
에러는 다음과 같다:
2020-09-17 15:49:29,132 ERROR akka.actor.ActorSystemImpl - Error during processing of request: 'no matching constructor found on class com.your.main.routers.ExtraApiService$StreamingActor for arguments [class akka.stream.impl.QueueSource$$anon$1]'. Completing with 500 Internal Server Error response. To change default exception handling behavior, provide a custom ExceptionHandler.
java.lang.IllegalArgumentException: no matching constructor found on class com.your.main.routers.ExtraApiService$StreamingActor for arguments [class akka.stream.impl.QueueSource$$anon$1]
at akka.util.Reflect$.error$1(Reflect.scala:84)
at akka.util.Reflect$.findConstructor(Reflect.scala:108)
at akka.actor.ArgsReflectConstructor.<init>(IndirectActorProducer.scala:99)
at akka.actor.IndirectActorProducer$.apply(IndirectActorProducer.scala:64)
at akka.actor.Props.producer(Props.scala:130)
at akka.actor.Props.<init>(Props.scala:143)
at akka.actor.Props$.apply(Props.scala:85)
at com.your.main.routers.ExtraApiService.<init>(ExtraApiService.scala:260)
at com.your.main.CyclopsApiServer$.$anonfun$routes$1(CyclopsApiServer.scala:59)
at akka.http.scaladsl.server.Directive$.$anonfun$addByNameNullaryApply$2(Directive.scala:144)
at akka.http.scaladsl.server.Directive.$anonfun$tmap$2(Directive.scala:63)
at akka.http.scaladsl.server.directives.BasicDirectives.$anonfun$tprovide$1(BasicDirectives.scala:143)
at akka.http.scaladsl.server.Directive$$anon$1.tapply(Directive.scala:125)
at akka.http.scaladsl.server.Directive.$anonfun$tflatMap$2(Directive.scala:69)
at akka.http.scaladsl.server.directives.BasicDirectives.$anonfun$textract$2(BasicDirectives.scala:159)
at akka.http.scaladsl.server.directives.BasicDirectives.$anonfun$mapRouteResultWith$2(BasicDirectives.scala:72)
at akka.http.scaladsl.server.directives.BasicDirectives.$anonfun$textract$2(BasicDirectives.scala:159)
at akka.http.scaladsl.server.directives.ExecutionDirectives.$anonfun$handleExceptions$2(ExecutionDirectives.scala:32)
at akka.http.scaladsl.server.directives.BasicDirectives.$anonfun$textract$2(BasicDirectives.scala:159)
at akka.http.scaladsl.server.Route$.$anonfun$asyncHandler$1(Route.scala:86)
at akka.stream.impl.fusing.MapAsyncUnordered$$anon$31.onPush(Ops.scala:1376)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:523)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:409)
at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:606)
at akka.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:485)
at akka.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorGraphInterpreter.scala:581)
at akka.stream.impl.fusing.ActorGraphInterpreter.akka$stream$impl$fusing$ActorGraphInterpreter$$processEvent(ActorGraphInterpreter.scala:749)
at akka.stream.impl.fusing.ActorGraphInterpreter$$anonfun$receive$1.applyOrElse(ActorGraphInterpreter.scala:764)
at akka.actor.Actor.aroundReceive(Actor.scala:539)
at akka.actor.Actor.aroundReceive$(Actor.scala:537)
at akka.stream.impl.fusing.ActorGraphInterpreter.aroundReceive(ActorGraphInterpreter.scala:671)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:614)
at akka.actor.ActorCell.invoke(ActorCell.scala:583)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:268)
at akka.dispatch.Mailbox.run(Mailbox.scala:229)
at akka.dispatch.Mailbox.exec(Mailbox.scala:241)
at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
보면, Actor 클래스가 com.your.main.routers.ExtraApiService$StreamingActor
로, 내부 클래스로 적용되어 있다. 이 걸 사용하면 계속 에러가 떠서 킹받는다... 젠장 ... 이걸 외부 클래스로 빼주면 된다.