【问题标题】:How are Futures executed in an Akka actor期货如何在 Akka 演员中执行
【发布时间】:2019-02-18 23:09:28
【问题描述】:

我正在尝试创建一个执行网络调用并将响应存储在数据库中的后台任务。根据the documentation,后台任务应该使用 Akka Actor 系统中的调度程序。我需要在这个演员内部运行一个 Future:

    actorSystem.scheduler.scheduleOnce(delay = new FiniteDuration(0, TimeUnit.SECONDS)) {
        val future = network.request()
        future.flatMap(saveToDatabase(_))
    }

因此,我有两个问题:

  1. 这个未来是否保证会被执行(直到完成)?
  2. 其他请求是否可以跟进此任务的状态(是否已完成)?

【问题讨论】:

  • 你尝试的时候发生了什么?大概你发现了某种问题,所以用你发现的实际问题更新问题,也许有人可以帮助你。
  • @Tim 我没有遇到任何问题,我目前正在尝试弄清楚如何使用 Akka 系统。无论如何,即使我确实尝试过(并且它运行了),也不能保证 Future 会完成,这正是我正在寻找的。​​span>
  • 感谢您澄清您的问题。

标签: scala playframework-2.0 akka future


【解决方案1】:

future值中的Futurenetwork对象返回的,所以这个对象负责执行触发Future的代码,而不是Akka。因此,您需要查看request 调用的文档,以了解此Future 的完成保证。

flatMap 调用返回的Future 使用创建此任务时范围内的默认执行上下文。但是saveToDatabase 调用不能保证被调用,因为Future 可能会失败,而flatMap 只会在成功时调用。

如果您想跟踪此任务的状态,请在执行的各个点向监控参与者发送消息。然后其他参与者可以向该监控参与者询问任务的进度。

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2015-10-01
    相关资源
    最近更新 更多