我對scala和akka很新穎。我想知道,一旦演員完成其工作,就會終止所有其他演員。一旦一個演員完成其工作,終止所有其他演員
代碼的基本結構如下。有一位主管負責5名工人,這些工人由RoundRobinPool生成。每個工人都在做一些工作,並將結果發回給主人。我需要意識到的是讓主人在其中一人完成工作並將其送回主人時終止所有其他工作人員。然後主機會向主函數發送一些相對值,然後整個程序終止。
任何想法如何實現?
//Code:
object X{
sealed trait Message
case class Result() extends Message
case class Work() extends Message
case class Result() extends Message
case class Totalresult() extends Message
class Worker extends Actor{
def receive={
case Work =>
sender ! Result}
}//End of class Worker
class Master(nrOfWorkers: Int) extends Actor{
val workerRouter =context.actorOf(RoundRobinPool(nrOfWorkers).props(Props[Worker])))
def receive={
case Calculate => calculateSender=sender
case Result => calculateSender ! Totoalresult()
}
}//End of class Master
def main(args: String) {
val system =ActorSystem("mysystem")
val master=system.actorOf(Props(new Master(5),name="master")
val future=master ? Calculate
}
}
感謝您的回覆。我已經按照你所說的去嘗試殺死主人,儘管結果是好的,但是從終端上也可以看出,工作的其餘部分給主人的信息沒有交付。我意識到這是由於主演終止,但這個警告只是令人討厭。有什麼方法可以擺脫這種情況嗎? –
@ChenChen如果您正在討論發送給死信隊列的消息的警告,因爲預期的收件人已經死亡,我確信有一個設置控制這些消息的日誌記錄(我認爲記錄的消息甚至提到了這一點) 。通常我認爲這些消息是相對無害的,並且可能只是幫助調試更嚴重的問題。 – Shadowlands
是的,你是對的。我檢查文件說它可以通過添加:'akka {log-dead-letters-during-shutdown = on}'來完成。我是不是把這個放在導入行或者sbt之後? –