DATAES-893 - Adopt to changes in Project Reactor.

This commit is contained in:
Mark Paluch 2020-08-04 12:31:59 +02:00
parent f19bf64827
commit b30f12503d
No known key found for this signature in database
GPG Key ID: 51A00FA751B91849

View File

@ -22,10 +22,11 @@ import io.netty.handler.ssl.IdentityCipherSuiteFilter;
import io.netty.handler.ssl.JdkSslContext; import io.netty.handler.ssl.JdkSslContext;
import io.netty.handler.timeout.ReadTimeoutHandler; import io.netty.handler.timeout.ReadTimeoutHandler;
import io.netty.handler.timeout.WriteTimeoutHandler; import io.netty.handler.timeout.WriteTimeoutHandler;
import reactor.core.publisher.EmitterProcessor;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import reactor.core.publisher.FluxSink; import reactor.core.publisher.FluxIdentityProcessor;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import reactor.core.publisher.Processors;
import reactor.core.publisher.Sinks;
import reactor.netty.http.client.HttpClient; import reactor.netty.http.client.HttpClient;
import reactor.netty.transport.ProxyProvider; import reactor.netty.transport.ProxyProvider;
@ -106,6 +107,7 @@ import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.suggest.Suggest; import org.elasticsearch.search.suggest.Suggest;
import org.reactivestreams.Publisher; import org.reactivestreams.Publisher;
import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.ClientLogger; import org.springframework.data.elasticsearch.client.ClientLogger;
import org.springframework.data.elasticsearch.client.ElasticsearchHost; import org.springframework.data.elasticsearch.client.ElasticsearchHost;
@ -465,12 +467,10 @@ public class DefaultReactiveElasticsearchClient implements ReactiveElasticsearch
searchRequest.scroll(scrollTimeout); searchRequest.scroll(scrollTimeout);
} }
EmitterProcessor<ActionRequest> outbound = EmitterProcessor.create(false); Sinks.StandaloneFluxSink<ActionRequest> request = Sinks.unicast();
FluxSink<ActionRequest> request = outbound.sink(); FluxIdentityProcessor<SearchResponse> inbound = Processors.unicast();
EmitterProcessor<SearchResponse> inbound = EmitterProcessor.create(false); Flux<SearchResponse> exchange = request.asFlux().flatMap(it -> {
Flux<SearchResponse> exchange = outbound.startWith(searchRequest).flatMap(it -> {
if (it instanceof SearchRequest) { if (it instanceof SearchRequest) {
return sendRequest((SearchRequest) it, requestCreator.search(), SearchResponse.class, headers); return sendRequest((SearchRequest) it, requestCreator.search(), SearchResponse.class, headers);
@ -495,7 +495,7 @@ public class DefaultReactiveElasticsearchClient implements ReactiveElasticsearch
if (isEmpty(searchResponse.getHits())) { if (isEmpty(searchResponse.getHits())) {
inbound.onComplete(); inbound.onComplete();
outbound.onComplete(); request.complete();
} else { } else {
@ -509,10 +509,13 @@ public class DefaultReactiveElasticsearchClient implements ReactiveElasticsearch
}).map(SearchResponse::getHits) // }).map(SearchResponse::getHits) //
.flatMap(Flux::fromIterable); .flatMap(Flux::fromIterable);
return searchHits.doOnSubscribe(ignore -> exchange.subscribe(inbound)); return searchHits.doOnSubscribe(ignore -> {
exchange.subscribe(inbound);
request.next(searchRequest);
});
}, state -> cleanupScroll(headers, state), // }, state -> cleanupScroll(headers, state), //
state -> cleanupScroll(headers, state), // (state, ex) -> cleanupScroll(headers, state), //
state -> cleanupScroll(headers, state)); // state -> cleanupScroll(headers, state)); //
} }