我正在学习使用Akka Streams,非常喜欢它,但材料化部分仍然有些神秘。
... 通过调用HostConnectionPool实例上的shutdown()方法来立即关闭特定池
如何获得HostConnectionPool实例?
更重要的是,我想了解一般如何访问材料化值并从中执行某些操作或检索信息。
提前感谢任何文档指针或解释。
我正在学习使用Akka Streams,非常喜欢它,但材料化部分仍然有些神秘。
... 通过调用HostConnectionPool实例上的shutdown()方法来立即关闭特定池
如何获得HostConnectionPool实例?
更重要的是,我想了解一般如何访问材料化值并从中执行某些操作或检索信息。
提前感谢任何文档指针或解释。
使用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
实例化为Unit
,因此Keep.right
表示保留poolClientFlow
实例化的HostConnectionPool
。在.toMat
函数中,Keep.both
表示保留流的左侧池和Sink
的右侧Future
。