使用Akka-Http流进行轮询

7cwmlq89  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(213)

我找到了一个[example][1],其中akka-http和Source.single一起使用来发出请求。现在我想使用Source.tick来实现每X秒执行一次的轮询请求,如下所示:

import akka.http.scaladsl.model._
import scala.concurrent.duration._

val request: HttpRequest = RequestBuilding.Get(Uri("http://api.someSite.com"))
val source: Source[HttpRequest, Cancellable] = Source.tick(1.seconds, 1.seconds, request)
val sourceWithDest = source.via(Http().superPool())

然而,我在最后一行遇到了一个编译错误,我无法解决(类型不匹配)。有什么想法说明我做错了什么,或者有什么替代方法吗?[1]:https://gist.github.com/steinybot/a1f79fe9a67693722164

2w2cym1i

2w2cym1i1#

根据文件:
Http().superPool(...)返回的流与来自主机级客户端API的流非常相似,因此使用主机连接池部分也适用于此处。
然后呢
Http().cachedHostConnectionPool(...)返回的“池客户端流”具有以下类型:
NotUsed
这是为了给予客户端代码能够实现一些逻辑来匹配原始请求和相应的响应。假设你不需要这种行为,你总是可以在把它提供给池流之前把NotUsed附加到你的请求上。例如:

val sourceWithDest: Source[Try[HttpResponse], Cancellable] = 
    source.map(req ⇒ (req, NotUsed)).via(Http().superPool[NotUsed]()).map(_._1)

相关问题