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

Yar*_*ena 9 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

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

如何获取HostConnectionPool实例?

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

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

Ram*_*gil 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()
Run Code Online (Sandbox Code Playgroud)

由于Source.single物化到UnitKeep.right说,以保持HostConnectionPoolpoolClientFlow物化到.在.toMat函数中声明Keep.both要保持左池不受流量Future的影响Sink.