Spring Boot Reactor Netty Configuration

1. Oversigt

I denne vejledning skal vi se på forskellige konfigurationsindstillinger for en Reactor Netty-server i en Spring Boot-applikation. I sidste ende har vi en applikation, der viser forskellige konfigurationsmetoder.

2. Hvad er Reactor Netty?

Før vi begynder, lad os se på, hvad Reactor Netty er, og hvordan det relaterer til Spring Boot.

Reaktor Netty er en asynkron hændelsesdrevet netværksapplikationsramme. Det giver ikke-blokerende og modtryk-klar TCP-, HTTP- og UDP-klienter og servere. Som navnet antyder, er det baseret på Netty-rammen.

Lad os nu se, hvor Spring and Spring Boot kommer ind i billedet.

Spring WebFlux er en del af Spring-rammen og giver reaktiv programmeringsstøtte til webapplikationer. Hvis vi bruger WebFlux i en Spring Boot-applikation, Spring Bootkonfigurerer automatiskReactor Netty som standardserver. Derudover kan vi eksplicit tilføje Reactor Netty til vores projekt, og Spring Boot skal igen automatisk konfigurere det.

Nu bygger vi en applikation for at lære, hvordan vi kan tilpasse vores automatisk konfigurerede Reactor Netty-server. Derefter dækker vi nogle almindelige konfigurationsscenarier.

3. Afhængigheder

For det første tilføjer vi den krævede Maven-afhængighed.

For at bruge Reactor Netty-serveren tilføjer vi spring-boot-starter-webflux som en afhængighed i vores pom-fil:

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

Dette trækker også ind spring-boot-starter-reactor-netty som en midlertidig afhængighed af vores projekt.

4. Serverkonfiguration

4.1. Brug af egenskabsfiler

Som den første mulighed kan vi konfigurere Netty-serveren gennem egenskabsfiler. Spring Boot udsætter nogle af de almindelige serverkonfigurationer i Ansøgning egenskabsfil:

Lad os definere serverporten i application.properties:

server.port = 8088

Eller vi kunne have gjort det samme i ansøgning.yml:

server: port: 8088

Foruden serverporten har Spring Boot mange andre tilgængelige serverkonfigurationsindstillinger. De egenskaber, der starter med server præfikslad os tilsidesætte standardserverkonfigurationen. Vi kan let slå disse egenskaber op i Spring-dokumentationen under INDBYGGET SERVERKONFIGURATION afsnit.

4.2. Brug af programmatisk konfiguration

Lad os nu se på hvordan Vi kan konfigurere vores integrerede Netty-server via kode. Til dette formål giver Spring Boot os WebServerFactoryCustomizer og NettyServerCustomizer klasser.

Lad os bruge disse klasser til at konfigurere Netty-porten, som vi tidligere gjorde med vores egenskabsfil:

@Komponent offentlig klasse NettyWebServerFactoryPortCustomizer implementerer WebServerFactoryCustomizer {@Override public void customize (NettyReactiveWebServerFactory serverFactory) {serverFactory.setPort (8088); }}

Spring Boot henter vores fabrikstilpasningskomponent under opstart og konfigurerer 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 anvender (HttpServer httpServer) {returner httpServer.port (port); }}

Og tilføj det til serverfabrikken:

serverFactory.addServerCustomizers (ny PortCustomizer (8088));

Disse to tilgange giver os stor fleksibilitet, når vi konfigurerer vores integrerede Reactor Netty-server.

Desuden kan vi også få adgang til ServerBootstrap klasse fra Netty-rammen og lav vores 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))); }}

Der er dog en advarsel for denne sag. Da Spring Boot automatisk konfigurerer Netty-serveren, Vi bliver muligvis nødt til at springe over automatisk konfiguration ved at udtrykkeligt definere vores NettyReactiveWebServerFactory bønne.

Til dette formål skal vi definere vores bønne i en konfigurationsklasse og tilføje vores tilpasning der:

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

Dernæst fortsætter vi med nogle almindelige Netty-konfigurationsscenarier.

5. SSL-konfiguration

Lad os se, hvordan vi kan konfigurere SSL.

Vi bruger SslServerCustomizer klasse, som er en anden implementering af NettyServerCustomizer:

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

Her har vi defineret vores keystore-relaterede egenskaber, deaktiveret HTTP / 2 og indstillet porten til 8443.

6. Adgangslogkonfiguration

Nu ser vi på, hvordan vi kan konfigurere adgangslogning ved hjælp af Logback.

Spring Boot giver os mulighed for at konfigurere adgangslogning i applikationsegenskabsfilen til Tomcat, Jetty og Undertow. Imidlertid har Netty ikke denne støtte endnu.

For at aktivere logning af Netty-adgang, vi skal sætte-Dreactor.netty.http.server.accessLogEnabled = sand når du kører vores ansøgning:

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

7. Konklusion

I denne artikel har vi dækket, hvordan du konfigurerer Reactor Netty-serveren i en Spring Boot-applikation.

For det første brugte vi de generelle Spring Boot egenskabsbaserede konfigurationsfunktioner. Og så undersøgte vi, hvordan man programmatisk konfigurerer Netty på en finkornet måde.

Endelig er kildekoden til denne artikel tilgængelig på Github.