gpt4 book ai didi

scala - akka-http 中的连接池使用源队列实现线程安全吗?

转载 作者:行者123 更新时间:2023-12-04 15:19:05 25 4
gpt4 key购买 nike

引用下面提到的实现:

http://doc.akka.io/docs/akka-http/10.0.5/scala/http/client-side/host-level.html

val poolClientFlow = Http().cachedHostConnectionPool[Promise[HttpResponse]]("akka.io")
val queue =
Source.queue[(HttpRequest, Promise[HttpResponse])](QueueSize, OverflowStrategy.dropNew)
.via(poolClientFlow)
.toMat(Sink.foreach({
case ((Success(resp), p)) => p.success(resp)
case ((Failure(e), p)) => p.failure(e)
}))(Keep.left)
.run()

提供来自多个线程的队列 http 请求是否线程安全?
如果不是,那么实现此类要求的最佳方法是什么?也许使用专门的 Actor ?

最佳答案

不,它不是线程安全的,根据 api doc :SourceQueue that current source is materialized to is for single thread usage only.
一个专门的 Actor 会工作得很好,但如果可以的话,使用 Source.actorRef ( doc link ) 而不是 Source.queue会更容易。

总的来说,下行Source.actorRef是缺乏背压,但是当你使用 OverflowStrategy.dropNew ,很明显你不期望背压。因此,您可以使用 Source.actorRef 获得相同的行为。 .

关于scala - akka-http 中的连接池使用源队列实现线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43013771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com