小编Nik*_*sev的帖子

反应性WebClient不发出响应

我有一个关于Spring Reactive WebClient的问题...几天前,我决定使用Spring Framework中的新的React东西,并且我做了一个小项目,仅出于个人目的抓取数据。(对一个网页发出多个请求并合并结果)。

我开始使用新的反应式WebClient发出请求,但发现的问题是客户端未针对每个请求发出响应。听起来很奇怪。这是我为获取数据所做的:

private Mono<String> fetchData(String uri) {
    return this.client
            .get()
            .uri(uri)
            .header("X-Fsign","SW9D1eZo")
            .retrieve()
            .bodyToMono(String.class)
            .timeout(Duration.ofSeconds(35))
            .log("category", Level.ALL, SignalType.ON_ERROR, SignalType.ON_COMPLETE, SignalType.CANCEL, SignalType.REQUEST);
}
Run Code Online (Sandbox Code Playgroud)

和调用的函数fetchData

public Mono<List<Stat>> fetch() {
    return fetchData(URL)
            .map(this::extractUrls)
            .doOnNext(System.out::println)
            .doOnNext(s-> System.out.println("all ids are "+s.size()))
            .flatMapIterable(q->q)
            .map(s -> s.substring(7, 15))
            .map(s -> "http://d.flashscore.com/x/feed/d_hh_" + s + "_en_1") // list of N-length urls
            .flatMap(this::fetchData)
            .map(this::extractHeadToHead)
            .collectList();
}
Run Code Online (Sandbox Code Playgroud)

和订户:

    FlashScoreService bean = ctx.getBean(FlashScoreService.class);
    bean.fetch().subscribe(s->{
        System.out.println("finished !!! " + s.size()); //expecting same N-length list size
    },Throwable::printStackTrace);
Run Code Online (Sandbox Code Playgroud)

问题是如果我发出的请求多于100个,那么我没有得到所有响应,没有错误抛出,或者返回了错误响应代码,并以与请求数量不同的大小调用了subscription方法。 …

spring reactive-programming project-reactor spring-webflux

8
推荐指数
1
解决办法
4741
查看次数