在 Akka-Streams 中与 mapAsync 一起使用的 ExecutionContext

ExecutionContext to use with mapAsync in Akka-Streams

我刚刚开始使用 Akka Stream,我正在尝试解决问题:

目前,在我的流程中,我按照建议使用 mapAsync() 与我的其余服务集成 here

我一直在想,mapAsync() 应该使用什么执行上下文? 它应该是我的 ActorSystem 的调度员吗?全球? 在这两种情况下是否有任何不明显的后果?

我意识到这可能是一个愚蠢的问题,但我以前从未处理过 Akka,并且在任何涉及 Futures 的 Scala 应用程序中,我只使用过全局执行上下文。

mapAsync 阶段不需要执行上下文,它只需要您将当前流元素映射到 Future。 Future 的执行上下文取决于创建它的人,流程对此一无所知。

更一般地说,Future[A] 是一种抽象,不需要您知道它在 运行 的位置。它甚至可以是不需要执行上下文的预计算值:

def mappingFunction(x: Int) = Future.successful(x * 2)
Source(List(1, 2, 3)).mapAsync(1)(mappingFunction)

您只需要在创建 Future 时担心 ExecutionContexts,但在 mapAsync 的情况下,您只是 return 从函数中获取一个。如何创造未来是职能的责任。就 mapAsync 阶段而言,它只是将未来作为函数的 return 值获取,即它不会创建它。

流有 Materializer。它当前的实现是 ActorMaterializer,它使用 ActorSystem(及其调度程序)具体化流。尽管您不需要了解流具体化的细节,但流在更抽象的层面上工作,并且假设您可以有一个不同的 Materializer,它不适用于 ActorSystem