我在创建“背压系统”时遇到了问题。我使用的是Vertx HttpClient和RxJava。 我需要向外部服务做6000请求,并且为了避免在waitingForQueue中填满,由于这个外部服务无法像我发送的那样快速处理,我在请求/响应之间放了一个延迟。
由于这个过程是批量处理的,所以如果需要一分钟就不用担心。
这是我的代码
return from(subGroups)
.flatMap(subGroup -> getProductIdsForSubGroup(subGroup))
.delay(50, TimeUnit.MILLISECONDS)
这个方法是从Observable间隔调用的,该间隔每24小时运行一次,通过这个子组列表(6000)
但是在检查了我的日志之后,我看不到我的请求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))
答案 0 :(得分:1)
请注意delay
只会延迟发射,所以它基本上浪费了时间。
如果您可以通过最多10个同时请求/连接来查询远程系统,则可以使用2参数flatMap
:
return from(subGroups)
.flatMap(subGroup -> getProductIdsForSubGroup(subGroup), 10);