【发布时间】:2019-01-13 11:16:26
【问题描述】:
使用 spring boot 响应式 Web 的 WebClient,我需要调用一个返回 XML 响应的 API。响应可能包含 NextToken - 如果它存在,我想使用最后返回的 NextToken 值再次调用 Web 服务,直到响应中不存在 NextToken。
当前代码为第一个和第二个请求返回正确的结果,但它没有连接返回的值,第三个和每个后续请求都是第二个的重复。
如何有条件地重复请求,直到满足takeUntil 中的以下条件,同时所有订单都连接起来?
client.request(EU, Orders, ListOrdersRequest.forShipped(userData, LocalDateTime.now().minusDays(7), LocalDateTime.now().minusHours(2).minusMinutes(2)), ListOrdersResponse.class)
.flatMap(e -> {
if (e.getListOrdersResult().getNextToken() != null) {
return client.request(EU, Orders, ListOrdersRequest.byNextToken(userData, e.getListOrdersResult().getNextToken()), ListOrdersByNextTokenResponse.class)
.mergeWith(x -> Flux.just(e));
}
return Flux.just(e);
})
.delayElements(Duration.ofMinutes(1))
.repeat()
.retryBackoff(10, Duration.ofMinutes(2), Duration.ofMinutes(20))
.takeWhile(r -> r.getListOrdersResult().getNextToken() != null)
.checkpoint("nextToken fetched", true)
【问题讨论】:
标签: java spring-webflux