我正在尝试使用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