Spring WebFlux i Netty - customowy Thread Pool

1

No witam. Mam następująca sprawę - biorę udział w projekcie gdzie stosuje Spring Weblux do tworzenia API restowego. Poza tym w wersji do urchumiania normalnie aplikacji korzystam ze Spring IoC i na tym Spring się zasadniczo kończy, a do API wykorzystuje RouterFunction a nie jakies tam @RestControllery i inne adnotacje :) W testach już DI robię z palca, wykorzystując magiczne slówko new i konstruktory, stawiając serwer ręcznie, cos jak tutaj (z dokumentacji Springa fragment):

HttpHandler handler = ...
ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(handler);
HttpServer.create(host, port).newHandler(adapter).block();

Teraz mam takie pytanie - jak do Nettiego przekazać instancje ExecutorService który ma być wykorzystany (w testach)
@jarekr000000 wzywam Cie :D

1

Hmmm

Czy na pewno potrzebujesz schedulera do netty?
Bo w testach możesz podpiąć routing bez servera:
see https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/web/reactive/server/WebTestClient.html (bindToRouterFunction).

A jeśli jednak potrzebujesz ustawić nettiemu... to, no właśnie, jest ciężko, w zasadzie ExecutorService nie podłączysz, albo ja nie umiem.

Właśnie nie udało mi się znaleźć kodu gdzie robiłem konfiguracje wątków (jest możliwe, że poszedł do śmieci - bo to był eksperyment, który zarzuciłem), ale wiem czego szukać:

HttpServer.builder(), a potem trzeba ustawić EventLoopGroup o ile mi się nie chrzani coś, przy czym nie jest to takie bezpośrednie.
A to nadal nie jest konfiguracja pod Executor, tylko możesz np. ustawić rozmiar puli wątków.

Przy czym takie zabawy były rok temu, dziwie się, że nadal tego nie poprawili (albo nie mogę znaleźć jak) .. bo mieli poprawić tą konfigurowalność.

EDIT:
Właśnie się wyszukała taka zabawa:

val builder = HttpServer.builder().options{
            opt ->
            opt.loopResources(
                    LoopResources.create("oo", 125, false)
            ).host("localhost")
                    .port(8089)
        }

A gdybym teraz zamiast tego LoopResources.create chcieć jakoś utworzyć implementację działającą na zapodanym Executorze.. to chyba bym jajko prędzej zniósł niż napisał (ale niby się da).

EDIT2:
Najgorsze, że wszystko w wersji 0. 7
https://github.com/reactor/reactor-netty/blob/0.7.x/src/main/java/reactor/ipc/netty/http/server/HttpServer.java
W wersji 0.8 troche poprzenosiło:
https://stackoverflow.com/questions/46567818/how-to-configure-netty-in-spring-boot-2

0

@jarekr000000: a wiesz jak można instancje ObjectMappera do tego WebTestClienta przekazać? :D

0

Zobacz kod w https://github.com/spring-projects/spring-boot/issues/8630 exchangeStrategies.
Nie mam teraz dostpępu do kodu, ale kojarze, że coś takiego robiłem i to niedawno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1