在akka http流请求中使用KillSwitch

时间:2018-09-25 17:43:57

标签: http akka akka-stream

我正在使用Akka的HTTP客户端建立与无限流HTTP端点的连接。我很难让客户端关闭HTTP服务器的上游。

这是我的代码(StreamRequest().stream返回一个Source[T, Any]。它由Http().outgoingConnectionHttps生成,然后由Flow[HttpResponse, T, NotUsed]生成,将HttpResponse转换为{{1 }}):

T

然后我有

(killSwitch, tFuture) = StreamRequest()
  .stream
  .takeWithin(timeToStreamFor)
  .take(toPull)
  .viaMat(KillSwitches.single)(Keep.right)
  .toMat(Sink.seq)(Keep.both)
  .run()

运行代码时,我看到“正在关闭连接”日志消息,但服务器告诉我我仍然处于连接状态。仅当JVM退出时,它才会断开连接。

有什么想法我做错了什么,或者我应该在这里做些什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我怀疑您应该在Http().shutdownAllConnectionPools()完成时调用tFuture。池不会关闭连接,因为它们可以被不同的流实现重新使用,因此,当流完成时,它不会关闭池。您在日志中看到的关闭连接可能是因为其中一个连接触发了空闲超时。