2015-05-22 21 views
7

Próbuję zintegrować Reactor 2x do istniejącego Spring 4 aplikacji w celu zwiększenia wydajności podczas wykonywania wniosku REST gdzie resources może zostać pobrane od siebie niezależne, rodzaj map-zmniejszenie gdzie zrównoleglić zadanie do wielu wątków, a następnie połączyć je w bufor.Multithread wykonanie na wiosnę 4 stosując Reactor 2.0

tej pory tę próbkę pracy w środowisku innym niż wiosną:

//Ordered resources to apply transformations. 
    List<Map<String, Object>> result; 

    result = Streams.from(resources) 
        .flatMap(m -> Streams.just(m) .dispatchOn(Environment.cachedDispatcher()) 
        .map(resourceToMapFunction::apply)) 
        .buffer().next().await(5, TimeUnit.SECONDS); 

W powyższym przykładzie, możemy zastosować transformację przy użyciu resourceToMapFunction a następnie na przyłączyć się metodą buffer() utwórz Promise czekać na wynik i zwrócić result.

Moje pierwsze pytanie, czy w ten sposób Reactor ma być używany? Wiem, że transformacje są poprawnie zastosowane, ale być może nowicjusz w Reactor nie używa czegoś we właściwy sposób.

Moje drugie pytanie, to nie jest wielka sprawa, ale czy jest coś w projekcie Reactor, aby powrócić w tej samej kolejności podanej w wejściu resources? Ponieważ jest to wykonywane w wielu wątkach, jestem pewien, że odpowiedź nie jest, i jak powiedziałem, to mniej z moich zmartwień, ale chciałem zapytać tak czy inaczej.

Ostatnie pytanie: kiedy wprowadzam ten kod do mojego projektu Spring, transformacje się nie powiodły, ponieważ zależności Bean w celu zastosowania transformacji podkładania nie występują w wątkach wykonawczych, czy jest to coś, co mogę z łatwością wykonać za pomocą wersji Spring Reactor? Jeśli tak, czy istnieje jakiś link lub dokument pokazujący, jak to zrobić?

Wielkie dzięki!

José Luis

Odpowiedz

0

Czy próbowali robić reduce zamiast bufora?

+0

Dzięki za odpowiedź, czy możesz wskazać mi przykładowy kod przy użyciu opcji zmniejszenia? Również, jak z niego korzystać stosując 'Spring ApplicationContext'? tj. użyć "fasoli sprężynowej" wstrzykniętej do głównego wątku. Poszedłem za tym przykładem: https://github.com/reactor/reactor-samples/blob/master/src/main/java/org/projectreactor/samples/SpringSamples.java i zmusiłem go do pracy z 'EventBus' jako POC, ale moim celem jest sprawienie, by działał z 'strumieniami '. Znowu twoja pomoc jest bardzo doceniana. – jbarrueta