我正在学习使用 Akka 流,并且非常喜欢它,但物化部分对我来说仍然是个谜。
...通过在池客户端流具体化到的 HostConnectionPool 实例上调用 shutdown() 来触发特定池的立即关闭
如何获取 HostConnectionPool 实例?
更重要的是,我想大致了解如何访问物化值并执行一些操作或从中检索信息。
提前感谢任何文档指针或解释。
我正在学习使用 Akka 流,并且非常喜欢它,但物化部分对我来说仍然是个谜。
...通过在池客户端流具体化到的 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
就说保持物化成HostConnectionPool
的poolClientFlow
。在.toMat
函数中,Keep.both
表示要使左侧池与流保持一致,而将右侧池Future
与Sink
.