我有一個這樣定義的演員
class RandomActor @Inject() (
accounts: models.Accounts
)extends Actor with ActorLogging{
override def receive: Receive = {
case Create(address, username, type, password) => {
accounts.Service.create(address, username, type, password)
}
}
}
Accounts是一個模型類,它有一個object被呼叫Service的create方法。此create方法回傳一個Future[String]. 因此,當我嘗試從角色呼叫此 create 方法時,是否可以Future[String]將角色作為訊息回傳,該訊息可以存盤到角色外部的變數中?
uj5u.com熱心網友回復:
這里似乎有兩個問題:如何從 a 生成訊息Future以及如何從角色系統“輸出”訊息。
回答第一個問題是使用onComplete在Future:
accounts.Service.create(address, username, type, password).onComplete{
case Success(account) =>
otherActor ! AccountCreated(account)
case Failure(e) =>
otherActor ! CreateAccountFailed(address, username, type)
}
這將在Future完成時發送適當的訊息(成功或有錯誤)。
第二個問題的答案是使用ask允許從actor系統外部向actor發送訊息并接收回復的模式:
(RandomActor ? RequestMessage).mapTo[ReplyType].onComplete {
case Success(reply) =>
// process reply
case Failure(e) =>
// process error
}
請注意,答案將異步出現在單獨的執行緒上,因此在處理此類回復時需要小心。有關詢問的更多詳細資訊,請參見此處。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312780.html
上一篇:[Scala][Spark]:轉換資料框中的一列,保留其他列,使用withColumn和map[錯誤:缺少引數型別]
下一篇:chisel如何連接到這樣的埠?
