私は akka アクター間のメッセージング プロセスを構築して、マスターがワーカーに仕事を与え、それを監視していることを表現しようとしています。私の質問は
- 以下で私が提案しているのは、合理的なアプローチであり、
- そうでない場合でも、Future 教育のために、Futures の構成で適切に行う方法を知りたいです。
私が望むプロセスは次のようになります
1)マスターはask
. 5 秒以内に応答することを期待します。それ以外の場合、ワーカーはチャンスを逃したと見なされ、再度入札に参加する必要があります。
import context.dispatcher
implicit val timeout = Timeout(5 seconds)
val workCompletedFuture = (worker ? WorkTicket(work)).mapTo[Future[WorkCompleted]]
2a)ワーカーが 5 秒以内に応答しない場合は、マスターに、作業を再割り当てするようにというメッセージを自分自身に送信してもらいたいと思います。
self ! WorkAllocationFailed(work, worker)
2b)ワーカーが応答した場合は、Future[WorkCompleted] が返されます。その未来が完成するのを、例えば2分くらい待ってみたいです。
3a) Future[WorkCompleted] がタイムアウト内に完了しない場合、作業を再割り当てする
self ! WorkFailed(work, worker)
3b) Future[WorkCompleted] が成功した場合、結果を収集します
このロジックを作成しようとしましたが、ネストされた で混乱しonComplete
、Future[WorkCompleted] でタイムアウトを行う方法がわかりません。Akka 2.10 Futures docsを読んでみましたが、解決策がわかりませんでした。