2016-11-30 150 views
1

我有問題可以創建一個「背壓系統」。我正在使用Vertx HttpClient和RxJava。 我需要對外部服務執行6000個請求,並且爲了避免在waitingForQueue中完成,由於這個外部服務不能像我發送那樣快,所以我在請求/響應之間放了一個延遲。Vertx HttpClient和RxJava背壓

由於這個旅程是作爲批處理工作,如果需要一分鐘,不用擔心。

這裏我的代碼

return from(subGroups) 
     .flatMap(subGroup -> getProductIdsForSubGroup(subGroup)) 
     .delay(50, TimeUnit.MILLISECONDS) 

這種方法it's從運行每24h通過分組名單(6000)

但經過檢查我的日誌我看不到延遲一個可觀察的時間間隔調用我的50ms的

這3我的日誌請求之間

{"@timestamp":"2016-11-30T10:32:48.973+00:00","event":"started","requestHost":"localhost","requestMethod":"GET","requestUri":"/v3/comercial?category=T15EB&clientId=ERROR_NOT_SUPPLIED","requestHash":189630582,"level":"INFO","thread_name":"vert.x-eventloop-thread-5"} 
{"@timestamp":"2016-11-30T10:32:48.978+00:00","event":"started","requestHost":"localhost","requestMethod":"GET","requestUri":"/v3/commercial?category=T15EE&clientId=ERROR_NOT_SUPPLIED","requestHash":1296199359,"level":"INFO","thread_name":"vert.x-eventloop-thread-5"} 
{"@timestamp":"2016-11-30T10:32:48.981+00:00","event":"started","requestHost":"localhost","requestMethod":"GET","requestUri":"/v3/commercial?category=T15EG&clientId=ERROR_NOT_SUPPLIED","requestHash":228306365,"level":"INFO","thread_name":"vert.x-eventloop-thread-5"} 

任何想法我需要做什麼才能做到這一點?

問候。

SOLUTION

我最終使用concatMap請,如果你有更好的解決辦法,讓我知道

return from(subGroups) 
     .concatMap(subGroup -> Observable.just(subGroup).delay(50, TimeUnit.MILLISECONDS)) 
     .flatMap(subGroup -> getProductIdsForSubGroup(subGroup)) 

回答

1

注意delay只是延遲發射,所以它基本上是浪費時間。

如果你可以查詢與假設多達10個同時請求/連接遠程系統,可以使用2參數flatMap

return from(subGroups) 
    .flatMap(subGroup -> getProductIdsForSubGroup(subGroup), 10); 
+0

輝煌的解決方案,我完全忘記了這個選項! – paul