2016-11-30 7 views
1

「背圧システム」を作成する際に問題があります。私はVertx HttpClientとRxJavaを使っています。 私は外部サービスに対して6000リクエストを行う必要があり、waitingForQueueでいっぱいになるのを避けるために、この外部サービスは送信するほど速く処理できないため、リクエスト/レスポンスの間に遅延があります。Vertex HttpClientとRxJavaでの背圧

この旅行はバッチ処理として機能しているので、1分かかっても心配はありません。

ここに私のコード

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

この方法は、it'sは、サブグループ(6000)のリストを渡しておき24Hを実行する観察可能な間隔

から呼び出さしかし、私のログをチェックした後、私は遅延を見ることができません私のログのここでは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

関連する問題