У меня есть два разных источника некоторых идентификаторов, с которыми мне нужно работать.Один из файла, другой из URL.Когда я создаю Flux
из строк Файлов, я могу отлично работать над этим.Когда я переключаю функцию создания потока на ту, которая использует WebClient .... get (), я получаю разные результаты;WebClient никогда не вызывается по какой-то причине.
private Flux<String> retrieveIdListFromFile(String filename) {
try {
return Flux.fromIterable(Files.readAllLines(ResourceUtils.getFile(filename).toPath()));
} catch (IOException e) {
return Flux.error(e);
}
}
Здесь часть WebClient ...
private Flux<String> retrieveIdList() {
return client.get()
.uri(uriBuilder -> uriBuilder.path("capdocuments_201811v2/selectRaw")
.queryParam("q", "-P_Id:[* TO *]")
.queryParam("fq", "DateLastModified:[2010-01-01T00:00:00Z TO 2016-12-31T00:00:00Z]")
.queryParam("fl", "id")
.queryParam("rows", "10")
.queryParam("wt", "csv")
.build())
.retrieve()
.bodyToFlux(String.class);
}
Когда я делаю subscribe(System.out::println)
в потоке WebClient, ничего не происходит.Когда я делаю blockLast (), он работает (URL вызывается, данные возвращаются).Я не понимаю, почему и как это исправить, и что я делаю неправильно.С потоком, который исходит из файла, даже подписка работает нормально.Я как бы подумала, что Fluxes взаимозаменяемы ...
Когда я делаю retrieveIdList().log().subscribe()
:
INFO [main] reactor.Flux.OnAssembly.1 | onSubscribe([Fuseable] FluxOnAssembly.OnAssemblySubscriber)
INFO [main] reactor.Flux.OnAssembly.1 | request(unbounded)
Когда я делаю то же самое с blockLast () вместо subscribe ():
INFO [main] reactor.Flux.OnAssembly.1 | onSubscribe([Fuseable] FluxOnAssembly.OnAssemblySubscriber)
INFO [main] reactor.Flux.OnAssembly.1 | request(unbounded)
INFO [reactor-http-nio-4] reactor.Flux.OnAssembly.1 | onNext(id)
.
.
.