Tôi có một diễn viên tạo một diễn viên trẻ để thực hiện một số phép tính dài.Làm thế nào để đối phó với việc khởi tạo lâu dài của một diễn viên trẻ Akka?
Sự cố là khởi tạo diễn viên con mất vài giây và tất cả thư mà diễn viên chính gửi cho con giữa nó được tạo và được khởi tạo đầy đủ sẽ bị loại bỏ.
Đây là logic của mã mà tôi đang sử dụng:
class ChildActor extends Actor {
val tagger = IntializeTagger(...) // this takes a few seconds to complete
def receive = {
case Tag(text) => sender ! tagger.tag(text)
case "hello" => println("Hello")
case _ => println("Unknown message")
}
}
class ParentActor extends Actor {
val child = context.ActorOf(Props[ChildActor], name = "childactor")
// the below two messages seem to get lost
child ! "hello"
child ! Tag("This is my sample text")
def receive = {
...
}
}
Làm thế nào tôi có thể khắc phục vấn đề đó? Có thể làm cho phụ huynh diễn viên chờ cho đến khi đứa trẻ được khởi tạo hoàn toàn không? Tôi sẽ sử dụng diễn viên con với định tuyến và có thể trên các hệ thống diễn viên từ xa.
EDIT
Sau lời khuyên drexin của tôi có thay đổi mã của tôi vào:
class ChildActor extends Actor {
var tagger: Tagger = _
override def preStart() = {
tagger = IntializeTagger(...) // this takes a few seconds to complete
}
def receive = {
case Tag(text) => sender ! tagger.tag(text)
case "hello" => println("Hello")
case _ => println("Unknown message")
}
}
class ParentActor extends Actor {
var child: ActorRef = _
override def preStart() = {
child = context.ActorOf(Props[ChildActor], name = "childactor")
// When I add
// Thread.sleep(5000)
// here messages are processed without problems
// wihout hardcoding the 5 seconds waiting
// the below two messages seem to get lost
child ! "hello"
child ! Tag("This is my sample text")
}
def receive = {
...
}
}
nhưng vấn đề vẫn còn. Tôi đang thiếu gì?
Phiên bản nào của AKKA bạn đang sử dụng. Tôi gặp khó khăn trong việc mô phỏng vấn đề của bạn. Tất cả mọi thứ dường như làm việc tốt cho tôi. – cmbaxter
@cmbaxter: Tôi đang sử dụng akka 2.2-M2. – twowo