gRPC와 Akka를 동시에 사용해야하는 이유가 있습니다. 이 배우가 최고 배우로 시작되면 아무 것도 잘못되지 않습니다 (이 작은 데모에서). 그러나 아이의 배우가 될 때, 어떤 메시지를받을 수 없으며, 다음과 같은 상황이 기록됩니다ExecutionContext로 인해 Akka 데드 레터가 발생합니다.
[default-akka.actor.default-dispatcher-6] [akka://default/user/Grpc] Message [AkkaMessage.package$GlobalStart] from Actor[akka://default/user/TrackerCore#-808631363] to Actor[akka://default/user/Grpc#-1834173068] was not delivered. [1] dead letters encountered.
예 코어 :
: 나는 같은 새로운ExecutionContext
을 만들려고
class GrpcActor() extends Actor {
val ec = scala.concurrent.ExecutionContext.global
val service = grpcService.bindService(new GrpcServerImpl(), ec)
override def receive: Receive = {
case GlobalStart() => {
println("GlobalStart")
}
...
}
}
scala.concurrent.ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))
왜 이런 일이 생기고 이와 같은 죽은 글자 문제를 디버그 할 수 있습니까? 예외는 발생하지 않습니다.
업데이트 :
미안 내가 여기에 모든 것을 나열하지 않았다. 정상적인 Main 메서드를 사용하여 최고 액터로 GrpcActor
을 테스트하고 ScalaTest를 자식 액터로 테스트했습니다. 이는 실수입니다.
class GrpcActorTest extends FlatSpec with Matchers{
implicit val system = ActorSystem()
val actor: ActorRef = system.actorOf(Props[GrpcActor])
actor ! GlobalStart()
}
전체 액터 시스템을 활성 종료하는 것은이 빈 테스트 모음입니다. 그러나 문제는이 줄에 있습니다
배달 종료 후 GlobalStart()
배달이 지연되었습니다.
해당 줄이 없으면 종료 전에 메시지를 배달 할 수 있습니다.
정상적인 동작입니까?
(내 생각 : GlobalStart()
일부 무거운 작업을했고, 시간의 차이를 만든 그 라인과 종료 메시지 후 대기중인 것을 무슨 일이 있었)
문법 오류를 수정하고이 질문을 완성 해 주신 것에 대해 감사드립니다. – Skye347