簡體   English   中英

使用Akka-Http流進行輪詢

[英]Polling with Akka-Http stream

我找到了一個示例 ,其中akka-http與Source.single一起使用來發出請求。 現在,我想使用Source.tick來實現每隔X秒執行一次的輪詢請求,如下所示:

    import scala.concurrent.duration._
    val request: _root_.akka.http.scaladsl.model.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())

但是,我在無法解決的最后一行中遇到了編譯錯誤(類型不匹配)。 關於我做錯事情的任何想法或其他建議?

根據文檔

Http()。superPool(...)返回的流與主機級客戶端API中的流非常相似,因此“使用主機連接池”部分也適用於此。

然后

Http()。cachedHostConnectionPool(...)返回的“池客戶端流”具有以下類型:

Flow[(HttpRequest, T), (Try[HttpResponse], T), HostConnectionPool]

這是為了使客戶端代碼可以實現一些邏輯,以將原始請求與相應的響應進行匹配。 假設您在這種情況下不需要這種行為,則始終可以通過在請求添加到池流之前在請求中附加NotUsed來繼續進行操作。 例如

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM