簡體   English   中英

如何比較 Scala Twitter 期貨?

[英]How to compare Scala Twitter Futures?

我正在對一些 scala 代碼進行后端遷移。 當前代碼返回 com.twitter.util.Future[A] 並且我正在從我的新后端獲取響應並將其轉換為 Future[A]

為了監控遷移,我想做一個比較,這樣我就可以知道來自 2 個后端的響應多久不同,所以我有類似的東西

val b1Resp: Future[A] = getResponseFromBackend1()
val b2Resp: Future[A] = getResponseFromBackend2() map { resp => convert(resp)}

return b1Resp

我想驗證期貨的結果要么相同,要么都失敗。 對於差異,我將發布一個指標。

此外,我不想延遲返回。 我真的不在乎指標何時發布(當然是在合理范圍內),所以允許繼續執行是可以的

我該如何進行比較?

你想做的事情的大致輪廓是

{
  val b1Resp: Future[A] = getResponseFromBackend1()
  val b2Resp: Future[A] = getResponseFromBackend2() map { resp => convert(resp)}

  Future.join(b1Resp, b2Resp)  // combine the two futures into a future of a pair of their values
    .foreach {                 // when both are complete...
      case (b1, b2) =>
        // compare and tickle a metric or whatever
        ()  // explicit Unit value, in case the compiler warns about discarding a value
    }

  b1Resp  // return should generally be avoided in Scala
}

請注意, Future.join.foreach只是安排將來發生比較等; 它應該只給塊增加幾微秒。

對於標准庫期貨,等價於Future.join.foreach是(假設隱式ExecutionContext在范圍內):

b1Resp.zip(b2Resp)
  .foreach {
    // as above
  }

暫無
暫無

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

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