我正在嘗試使用akka-http爲AccountActors的REST API和akka actors創建一個貨幣交易系統。AskTimeoutException:詢問[5000毫秒]後超時
post {
(path("accounts"/"move-money") & entity(as[MoveMoneyRequest])) { moveMoneyRequest =>
complete(
(bankActor ? moveMoneyRequest).map(x => MoveMoneyResponse("Money Transfer Successful!"))
)
}
}
的bankActor是一個主要的應用程序
val bankActor = mainActorSystem.actorOf(Props(classOf[BankingActor], accountService), name = "bankActor")
內BankActor內創建的,我們有:
def receive: Receive = LoggingReceive {
case req: MoveMoneyRequest =>
val fromAcc = createAccountActor(Some(req.fromAccount))
val toAcc = createAccountActor(Some(req.toAccount))
fromAcc ? DebitAccount(req.tranferAmount)
become(awaitFrom(fromAcc, toAcc, req.tranferAmount, sender))
}
private def createAccountActor(accountNum: Option[String]): ActorRef = {
actorOf(Props(classOf[AccountActor], accountNum, accountService))
}
問:現在,第一個API調用每次,它是成功的但似乎演員死亡/關閉和? (問)沒有找到該演員,因爲該消息沒有達到接收方法。我需要使問詢電話不同嗎?
'fromAcc? DebitAccount(req.tranferAmount)'創建一個'Future',但它看起來並不像你對這個'Future'做任何事情。當BankActor發送DebitAccount消息時,您希望從'fromAcc'演員返回什麼樣的消息? – chunjef
一切正常,我得到預期的答案**,但只有一次** - 然後我不得不重新啓動服務器再次撥打電話,它工作正常。我認爲演員死亡,只有在服務器重新啓動後纔開始...... – boseAbhishek
嘗試更換'fromAcc? DebitAccount(req.tranferAmount)'with'fromAcc! DebitAccount(req.tranferAmount)'。 – chunjef