Akka-streams - 如何访问流的物化值

时间:2016-01-21 12:55:14

标签: scala akka-stream akka-http

我正在学习与Akka流一起工作,并且非常喜欢它,但物化部分对我来说仍然有些神秘。

引自http://doc.akka.io/docs/akka-stream-and-http-experimental/snapshot/scala/http/client-side/host-level.html#host-level-api

  

...通过调用触发特定池的立即关闭   shutdown()在HostConnectionPool实例上表示池客户端   流程实现了

如何获取HostConnectionPool实例?

更重要的是,我想了解一般如何访问物化值并执行某些操作或从中检索信息。

提前感谢任何文档指示或解释。

1 个答案:

答案 0 :(得分:9)

这是通过Source.viaMat功能完成的。从代码中提供的link扩展代码示例:

import akka.http.scaladsl.Http.HostConnectionPool
import akka.stream.scaladsl.Keep
import akka.stream.scaladsl.RunnableGraph

val poolClientFlow = Http().cachedHostConnectionPool[Int]("akka.io")

val graph: RunnableGraph[(HostConnectionPool, Future[(Try[HttpResponse], Int)])]  =
  Source.single(HttpRequest(uri = "/") -> 42)
        .viaMat(poolClientFlow)(Keep.right)
        .toMat(Sink.head)(Keep.both)

val (pool, fut) = graph.run()

pool.shutdown()

由于Source.single具体化为UnitKeep.right表示保留HostConnectionPool实现的poolClientFlow。在.toMat函数中,Keep.both表示要保留流池中的左池和Future中的右Sink