9

我正在学习使用 Akka 流,并且非常喜欢它,但物化部分对我来说仍然是个谜。

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

...通过在池客户端流具体化到的 HostConnectionPool 实例上调用 shutdown() 来触发特定池的立即关闭

如何获取 HostConnectionPool 实例?

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

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

4

1 回答 1

10

这是通过Source.viaMat函数完成的。从您的问题中提供的链接扩展代码示例:

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就说保持物化成HostConnectionPoolpoolClientFlow。在.toMat函数中,Keep.both表示要使左侧池与流保持一致,而将右侧池FutureSink.

于 2016-01-22T18:33:12.813 回答