最近、私は自分で俳優をラップして、ActorRef
を扱うときに失うタイプセーフティを少し取り戻すことができたことがわかりました。 問題は、最後に、特定のメッセージを送信する必要があるだけでなく、期待される結果に応答する必要があるということです。 私はPromise
を含む俳優にメッセージを送って、結果を最終的に報告できると考えました。Akka俳優:askパターンvs Promise
これは悪い考えですか?それは私にきれいに見える...タイプセーフであり、ちょうど良いとして動作します。なぜ誰もそのアイデアを持っていないのですか?私が気づいていないことが何か間違っていますか?
は何も悪いことはありませんパターンベースのソリューション
case class GetUser(id:Long)
(actorRef ! GetUser(1l)).mapTo[User]
class UserRepoActor extends Actor{
def receive={
case GetUser(id)=>
sender() ! getUser(id)
}
...
}
約束ベースのソリューション
case class GetUser(id: Long, resp: Promise[User])
val req = GetUser(1l,Promise())
actorRef ! req
req.resp.future // No casting!!
class UserRepoActor extends Actor{
def receive={
case GetUser(id,resp)=>
response.success(getUser(id))
}
...
}
約束を含む俳優にメッセージを送信することはどういう意味ですか?いずれにしても、着信メッセージに対してパターンマッチングを行う必要があります。いくつかのコードサンプルを投稿できますか? – sparkr