Rx java 使用Vertx HttpClient和RxJava的背压

Rx java 使用Vertx HttpClient和RxJava的背压,rx-java,vert.x,rx-java2,Rx Java,Vert.x,Rx Java2,我在创建“背压系统”时遇到问题。我使用的是VertxHttpClient和RxJava。 我需要向一个外部服务发出6000个请求,为了避免waitingForQueue中出现一个完整的请求,因为这个外部服务不能像我发送的那样快速处理,所以我在请求/响应之间设置了一个延迟 因为这个过程是一个批处理过程,如果需要一分钟,也不用担心 这是我的密码 return from(subGroups) .flatMap(subGroup -> getProductIdsForSubGrou

我在创建“背压系统”时遇到问题。我使用的是VertxHttpClient和RxJava。 我需要向一个外部服务发出6000个请求,为了避免waitingForQueue中出现一个完整的请求,因为这个外部服务不能像我发送的那样快速处理,所以我在请求/响应之间设置了一个延迟

因为这个过程是一个批处理过程,如果需要一分钟,也不用担心

这是我的密码

return from(subGroups)
        .flatMap(subGroup -> getProductIdsForSubGroup(subGroup))
        .delay(50, TimeUnit.MILLISECONDS)
这个方法是从一个可观察的时间间隔调用的,该时间间隔每24小时运行一次,通过这个子组列表(6000)

但在检查我的日志后,我看不到我的请求之间有50毫秒的延迟

这是我的三本日志

{"@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))

请注意,
delay
只是延迟了发射,因此这实际上是浪费时间

如果您可以使用最多10个同时请求/连接查询远程系统,则可以使用2参数
flatMap

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

绝妙的解决方案,我完全忘记了这个选项!