2

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

このジャーニーはバッチ プロセスとして機能するため、1 分かからなくても心配する必要はありません。

ここに私のコード

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

このメソッドは、このサブグループのリスト (6000) を渡す 24 時間ごとに実行される Observable 間隔から呼び出されます。

しかし、ログを確認した後、リクエスト間に 50 ミリ秒の遅延が見られません

ここに私のログの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"}

これを達成するために何をする必要があるか考えていますか?.

よろしく。

解決

より良い解決策があれば教えてconcatMapください。

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

1 に答える 1

1

delayは放出を遅らせるだけなので、本質的に無駄な時間であることに注意してください。

たとえば、最大 10 個の同時要求/接続でリモート システムにクエリを実行できる場合は、2 パラメータを使用できますflatMap

return from(subGroups)
    .flatMap(subGroup -> getProductIdsForSubGroup(subGroup), 10);
于 2016-11-30T15:55:37.180 に答える