Konfigurácia siete Spring Boot Reactor

1. Prehľad

V tomto výučbe sa pozrieme na rôzne možnosti konfigurácie servera Reactor Netty v aplikácii Spring Boot. Na konci budeme mať aplikáciu predstavujúcu rôzne prístupy k konfigurácii.

2. Čo je to Reactor Netty?

Než začneme, pozrime sa, čo je to Reactor Netty a ako to súvisí s Spring Boot.

Reactor Netty je asynchrónny rámec sieťových aplikácií riadený udalosťami. Poskytuje neblokujúce a na tlak pripravené TCP, HTTP a UDP klientov a servery. Ako už z názvu vyplýva, je založený na rámci Netty.

Teraz sa pozrime, kde sa jar a jarné topánky objavia na obrázku.

Spring WebFlux je súčasťou jarného rámca a poskytuje podporu reaktívneho programovania pre webové aplikácie. Ak používame WebFlux v aplikácii Spring Boot, Jarná topánkaautomaticky konfigurujeReactor Netty ako predvolený server. Okrem toho môžeme do nášho projektu výslovne pridať Reactor Netty a Spring Boot by ho mal znova automaticky nakonfigurovať.

Teraz zostavíme aplikáciu, ktorá sa dozvie, ako môžeme prispôsobiť náš automaticky nakonfigurovaný server Reactor Netty. Potom sa budeme venovať niektorým bežným konfiguračným scenárom.

3. Závislosti

Najskôr pridáme požadovanú závislosť Maven.

Pre použitie servera Reactor Netty pridáme spring-boot-starter-webflux ako závislosť v našom súbore pom:

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

Toto tiež vtiahne pružina-štartér-štartér-sieť-netty ako tranzitívna závislosť do nášho projektu.

4. Konfigurácia servera

4.1. Používanie súborov vlastností

Ako prvú možnosť môžeme nakonfigurovať server Netty prostredníctvom súborov vlastností. Spring Boot vystavuje niektoré bežné konfigurácie serverov v serveri žiadosť súbor vlastností:

Definujme port servera v application.properties:

server.port = 8088

Alebo sme mohli urobiť to isté v aplikácia.yml:

server: port: 8088

Okrem portu servera má Spring Boot mnoho ďalších dostupných možností konfigurácie servera. Vlastnosti, ktoré začínajú na server predponaprepíšeme predvolenú konfiguráciu servera. Tieto vlastnosti môžeme ľahko vyhľadať v jarnej dokumentácii pod ZÁKLADNÁ KONFIGURÁCIA SERVERU oddiel.

4.2. Používanie programovej konfigurácie

Teraz sa pozrime na to, ako na to môžeme náš zabudovaný server Netty nakonfigurovať pomocou kódu. Za týmto účelom nám Spring Boot dáva WebServerFactoryCustomizer a NettyServerCustomizer triedy.

Použime tieto triedy na konfiguráciu portu Netty, ako sme to urobili predtým v našom súbore vlastností:

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

Spring Boot počas spustenia vyzdvihne našu továrenskú súčasť prispôsobenia a nakonfiguruje port servera.

Prípadne môžeme zrealizovať NettyServerCustomizer:

súkromná statická trieda PortCustomizer implementuje NettyServerCustomizer {súkromný konečný int port; private PortCustomizer (int port) {this.port = port; } @Override public HttpServer apply (HttpServer httpServer) {return httpServer.port (port); }}

A pridajte ho do továrne na servery:

serverFactory.addServerCustomizers (nový PortCustomizer (8088));

Tieto dva prístupy nám poskytujú veľkú flexibilitu pri konfigurácii nášho zabudovaného servera Reactor Netty.

Ďalej máme tiež prístup k ServerBootstrap triedy z rámca Netty a urobíme tam naše prispôsobenia:

súkromná statická trieda EventLoopNettyCustomizer implementuje NettyServerCustomizer {@Override verejné HttpServer apply (HttpServer httpServer) {EventLoopGroup parentGroup = new NioEventLoopGroup (); EventLoopGroup childGroup = new NioEventLoopGroup (); návrat httpServer.tcpConfiguration (tcpServer -> tcpServer .bootstrap (serverBootstrap -> serverBootstrap .group (parentGroup, childGroup) .channel (NioServerSocketChannel.class))); }}

Pre tento prípad však existuje výhrada. Pretože Spring Boot automaticky konfiguruje server Netty, možno budeme musieť preskočiť automatickú konfiguráciu explicitným definovaním našej NettyReactiveWebServerFactory fazuľa.

Z tohto dôvodu by sme mali definovať našu fazuľu v konfiguračnej triede a pridať tam náš prispôsobovač:

@Bean public NettyReactiveWebServerFactory nettyReactiveWebServerFactory () {NettyReactiveWebServerFactory webServerFactory = nový NettyReactiveWebServerFactory (); webServerFactory.addServerCustomizers (nový EventLoopNettyCustomizer ()); vrátiť webServerFactory; }

Ďalej budeme pokračovať v niektorých bežných konfiguračných scenároch Netty.

5. Konfigurácia SSL

Pozrime sa, ako môžeme nakonfigurovať SSL.

Použijeme SslServerCustomizer triedy, čo je ďalšia implementácia NettyServerCustomizer:

@ Komponenta verejnej triedy NettyWebServerFactorySslCustomizer implementuje WebServerFactoryCustomizer {@Override public void customize (NettyReactiveWebServerFactory serverFactory) {Ssl ssl = nový Ssl (); ssl.setEnabled (true); ssl.setKeyStore ("classpath: sample.jks"); ssl.setKeyAlias ​​("alias"); ssl.setKeyPassword ("heslo"); ssl.setKeyStorePassword ("tajomstvo"); Http2 http2 = nový Http2 (); http2.setEnabled (false); serverFactory.addServerCustomizers (nový SslServerCustomizer (ssl, http2, null)); serverFactory.setPort (8443); }}

Tu sme definovali naše vlastnosti súvisiace s úložiskom kľúčov, deaktivovali HTTP / 2 a nastavili port na 8443.

6. Prístup ku konfigurácii protokolu

Teraz sa pozrieme na to, ako môžeme nakonfigurovať protokolovanie prístupu pomocou protokolu Logback.

Spring Boot nám umožňuje nakonfigurovať protokolovanie prístupu v súbore vlastností aplikácie pre Tomcat, Jetty a Undertow. Netty však túto podporu zatiaľ nemá.

Ak chcete povoliť protokolovanie prístupu k sieti, mali by sme nastaviť-Dreactor.netty.http.server.accessLogEnabled = true pri spustení našej aplikácie:

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

7. Záver

V tomto článku sme sa venovali tomu, ako nakonfigurovať server Reactor Netty v aplikácii Spring Boot.

Najprv sme použili všeobecné konfiguračné schopnosti založené na vlastnostiach Spring Boot. A potom sme preskúmali, ako programovo nakonfigurovať Netty podrobným spôsobom.

Nakoniec je zdrojový kód tohto článku k dispozícii na stránkach Github.


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