我正在尝试在 akka 演员之间建立一个消息传递过程,以代表主人给工人一份工作,并密切关注它。我的问题是
- 是我在合理的方法下提出的建议吗?
- 即使不是,为了我的未来教育,我想知道如何通过 Futures 的组合来正确完成它。
我想要的过程是这样的
1) Master 用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 文档,但找不到解决方案。