Spring Boot Reactor Netty Configuration

1. Oversikt

I denne opplæringen skal vi se på forskjellige konfigurasjonsalternativer for en Reactor Netty-server i en Spring Boot-applikasjon. Til slutt har vi et program som viser forskjellige konfigurasjonsmetoder.

2. Hva er Reactor Netty?

Før vi begynner, la oss se på hva Reactor Netty er og hvordan det forholder seg til Spring Boot.

Reactor Netty er en asynkront hendelsesdrevet nettverksapplikasjonsrammeverk. Det gir ikke-blokkerende og mottrykk-klare TCP-, HTTP- og UDP-klienter og servere. Som navnet antyder, er det basert på Netty-rammeverket.

La oss nå se hvor våren og vårstøvlen kommer inn i bildet.

Spring WebFlux er en del av Spring-rammeverket og gir reaktiv programmeringsstøtte for webapplikasjoner. Hvis vi bruker WebFlux i en Spring Boot-applikasjon, Vårstøvelkonfigurerer automatiskReactor Netty som standardserver. I tillegg til det kan vi eksplisitt legge til Reactor Netty i prosjektet vårt, og Spring Boot bør igjen automatisk konfigurere det.

Nå skal vi bygge et program for å lære hvordan vi kan tilpasse vår autokonfigurerte Reactor Netty-server. Etter det vil vi dekke noen vanlige konfigurasjonsscenarier.

3. Avhengigheter

For det første legger vi til den nødvendige Maven-avhengigheten.

For å bruke Reactor Netty-serveren vil vi legge til spring-boot-starter-webflux som en avhengighet i vår pom-fil:

 org.springframework.boot spring-boot-starter-webflux 

Dette vil også trekke inn spring-boot-starter-reactor-netty som en overgangsavhengighet i prosjektet vårt.

4. Serverkonfigurasjon

4.1. Bruke Egenskapsfiler

Som det første alternativet kan vi konfigurere Netty-serveren gjennom egenskapsfiler. Spring Boot avslører noen av de vanlige serverkonfigurasjonene i applikasjon egenskaper fil:

La oss definere serverporten i application.properties:

server.port = 8088

Eller vi kunne ha gjort det samme i application.yml:

server: port: 8088

I tillegg til serverporten har Spring Boot mange andre tilgjengelige serverkonfigurasjonsalternativer. Egenskapene som starter med server prefiksla oss overstyre standard serverkonfigurasjon. Vi kan enkelt slå opp disse egenskapene i vårdokumentasjonen under INNBYGGET SERVERKONFIGURASJON seksjon.

4.2. Bruke programmatisk konfigurasjon

La oss nå se på hvordan vi kan konfigurere den innebygde Netty-serveren vår via kode. For dette formålet gir Spring Boot oss WebServerFactoryCustomizer og NettyServerCustomizer klasser.

La oss bruke disse klassene til å konfigurere Netty-porten som vi gjorde tidligere med vår eiendomsfil:

@Component public class NettyWebServerFactoryPortCustomizer implementerer WebServerFactoryCustomizer {@Override public void customize (NettyReactiveWebServerFactory serverFactory) {serverFactory.setPort (8088); }}

Spring Boot vil hente vår fabrikktilpasningskomponent under oppstart og konfigurere serverporten.

Alternativt kan vi implementere NettyServerCustomizer:

privat statisk klasse PortCustomizer implementerer NettyServerCustomizer {private final int port; privat PortCustomizer (int-port) {this.port = port; } @ Override offentlig HttpServer gjelder (HttpServer httpServer) {return httpServer.port (port); }}

Og legg det til serverfabrikken:

serverFactory.addServerCustomizers (ny PortCustomizer (8088));

Disse to tilnærmingene gir oss mye fleksibilitet når vi konfigurerer den innebygde Reactor Netty-serveren.

Videre kan vi også få tilgang til ServerBootstrap klasse fra Netty-rammeverket og gjør våre tilpasninger der:

privat statisk klasse EventLoopNettyCustomizer implementerer NettyServerCustomizer {@Override public HttpServer apply (HttpServer httpServer) {EventLoopGroup parentGroup = new NioEventLoopGroup (); EventLoopGroup childGroup = ny NioEventLoopGroup (); returner httpServer.tcpConfiguration (tcpServer -> tcpServer .bootstrap (serverBootstrap -> serverBootstrap .group (parentGroup, childGroup) .channel (NioServerSocketChannel.class))); }}

Det er imidlertid en advarsel for denne saken. Siden Spring Boot automatisk konfigurerer Netty-serveren, Det kan hende at vi trenger å hoppe over automatisk konfigurasjon ved å eksplisitt definere vår NettyReactiveWebServerFactory bønne.

For dette formålet bør vi definere vår bønne i en konfigurasjonsklasse og legge til vår tilpasning der:

@Bean public NettyReactiveWebServerFactory nettyReactiveWebServerFactory () {NettyReactiveWebServerFactory webServerFactory = ny NettyReactiveWebServerFactory (); webServerFactory.addServerCustomizers (ny EventLoopNettyCustomizer ()); returner webServerFactory; }

Deretter fortsetter vi med noen vanlige Netty-konfigurasjonsscenarier.

5. SSL-konfigurasjon

La oss se hvordan vi kan konfigurere SSL.

Vi bruker SslServerCustomizer klasse som er en annen implementering av NettyServerCustomizer:

@Component public class NettyWebServerFactorySslCustomizer implementerer WebServerFactoryCustomizer {@Override public void customize (NettyReactiveWebServerFactory serverFactory) {Ssl ssl = new Ssl (); ssl.setEnabled (true); ssl.setKeyStore ("classpath: sample.jks"); ssl.setKeyAlias ​​("alias"); ssl.setKeyPassword ("passord"); ssl.setKeyStorePassword ("hemmelig"); Http2 http2 = ny Http2 (); http2.setEnabled (false); serverFactory.addServerCustomizers (ny SslServerCustomizer (ssl, http2, null)); serverFactory.setPort (8443); }}

Her har vi definert våre keystore-relaterte egenskaper, deaktivert HTTP / 2 og satt porten til 8443.

6. Få tilgang til loggkonfigurasjon

Nå skal vi se på hvordan vi kan konfigurere tilgangslogging ved hjelp av Logback.

Spring Boot lar oss konfigurere tilgangslogging i applikasjonsegenskapsfilen for Tomcat, Jetty og Undertow. Imidlertid har Netty ikke denne støtten ennå.

For å aktivere nettlogging, vi burde sette-Dreactor.netty.http.server.accessLogEnabled = sant når du kjører applikasjonen vår:

mvn spring-boot: run -Dreactor.netty.http.server.accessLogEnabled = true

7. Konklusjon

I denne artikkelen har vi dekket hvordan du konfigurerer Reactor Netty-serveren i en Spring Boot-applikasjon.

For det første brukte vi de generelle eiendomsbaserte konfigurasjonsfunksjonene for Spring Boot. Og så utforsket vi hvordan vi konfigurerer Netty på en finkornet måte.

Til slutt er kildekoden for denne artikkelen tilgjengelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found