Konfiguracija mrežastog reaktora za pokretanje mreže

1. Pregled

U ovom uputstvu ćemo pogledati različite mogućnosti konfiguracije za poslužitelj Reactor Netty u aplikaciji Spring Boot. Na kraju ćemo imati aplikaciju koja prikazuje različite pristupe konfiguraciji.

2. Što je Reactor Netty?

Prije nego što započnemo, pogledajmo što je Reactor Netty i kako se on odnosi na Spring Boot.

Reactor Netty je asinkroni mrežni aplikacijski okvir vođen događajima. Pruža TCP, HTTP i UDP klijente i poslužitelje koji nisu blokirani i spreman za povratni pritisak. Kao što naziv implicira, zasnovan je na Netty okviru.

Sada, pogledajmo gdje su proljeće i proljetni čizme na slici.

Spring WebFlux dio je Spring okvira i pruža reaktivnu podršku za programiranje web aplikacija. Ako koristimo WebFlux u aplikaciji Spring Boot, Proljetni čizmeautomatski konfiguriraReactor Netty kao zadani poslužitelj. Uz to, u naš projekt možemo izričito dodati Reactor Netty, a Spring Boot bi ga opet trebao automatski konfigurirati.

Sada ćemo izraditi aplikaciju kako bismo naučili kako možemo prilagoditi naš automatski konfigurirani poslužitelj Reactor Netty. Nakon toga ćemo pokriti neke uobičajene scenarije konfiguracije.

3. Ovisnosti

Prvo ćemo dodati potrebnu ovisnost o Mavenu.

Da bismo koristili Reactor Netty poslužitelj, dodati ćemo spring-boot-starter-webflux kao ovisnost u našoj pom datoteci:

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

Ovo će se također povući opruga-čizma-starter-reaktor-mreža kao prijelazna ovisnost o našem projektu.

4. Konfiguracija poslužitelja

4.1. Korištenje datoteka svojstava

Kao prvu opciju možemo konfigurirati Netty poslužitelj putem datoteka svojstava. Spring Boot izlaže neke od uobičajenih konfiguracija poslužitelja u primjena datoteka svojstava:

Definirajmo port poslužitelja u primjena.svojstva:

poslužitelj.port = 8088

Ili smo isto mogli učiniti u primjena.iml:

poslužitelj: port: 8088

Osim poslužiteljskog porta, Spring Boot ima i mnoge druge dostupne opcije konfiguracije poslužitelja. Svojstva koja počinju s poslužitelju prefiksdopustimo nadjačavanje zadane konfiguracije poslužitelja. Ta svojstva možemo lako potražiti u proljetnoj dokumentaciji pod KONFIGURACIJA UGRADNOG SERVERA odjeljak.

4.2. Korištenje programske konfiguracije

Pogledajmo sada kako svoj ugrađeni Netty poslužitelj možemo konfigurirati putem koda. U tu svrhu, Spring Boot nam daje WebServerFactoryCustomizer i NettyServerCustomizer razreda.

Upotrijebimo ove klase za konfiguriranje porta Netty kao što smo to prethodno radili s datotekom svojstava:

@Component javna klasa NettyWebServerFactoryPortCustomizer implementira WebServerFactoryCustomizer {@Override public void customize (NettyReactiveWebServerFactory serverFactory) {serverFactory.setPort (8088); }}

Spring Boot će tijekom pokretanja preuzeti našu tvorničku komponentu za prilagodbu i konfigurirati port poslužitelja.

Alternativno, možemo implementirati NettyServerCustomizer:

privatna statička klasa PortCustomizer implementira NettyServerCustomizer {private final int port; privatni PortCustomizer (int port) {this.port = port; } @Override javni HttpServer primjenjuje se (HttpServer httpServer) {return httpServer.port (port); }}

I dodajte ga u tvornicu poslužitelja:

serverFactory.addServerCustomizers (novi PortCustomizer (8088));

Ova dva pristupa daju nam veliku fleksibilnost prilikom konfiguriranja našeg ugrađenog poslužitelja Reactor Netty.

Nadalje, možemo pristupiti i ServerBootstrap klase iz Netty okvira i napravite naša prilagođavanja tamo:

privatna statička klasa EventLoopNettyCustomizer implementira NettyServerCustomizer {@Override javni HttpServer primijeniti (HttpServer httpServer) {EventLoopGroup parentGroup = new NioEventLoopGroup (); EventLoopGroup childGroup = novi NioEventLoopGroup (); vratiti httpServer.tcpConfiguration (tcpServer -> tcpServer .bootstrap (serverBootstrap -> serverBootstrap .group (parentGroup, childGroup) .channel (NioServerSocketChannel.class))); }}

Međutim, postoji upozorenje za ovaj slučaj. Budući da Spring Boot automatski konfigurira Netty poslužitelj, možda ćemo morati preskočiti automatsku konfiguraciju izričitim definiranjem našeg NettyReactiveWebServerFactory grah.

U tu svrhu trebali bismo definirati svoj grah u klasi konfiguracije i tamo dodati naš prilagoditelj:

@Bean public NettyReactiveWebServerFactory nettyReactiveWebServerFactory () {NettyReactiveWebServerFactory webServerFactory = novi NettyReactiveWebServerFactory (); webServerFactory.addServerCustomizers (novi EventLoopNettyCustomizer ()); vratiti webServerFactory; }

Zatim ćemo nastaviti s nekim uobičajenim Nettyjevim konfiguracijskim scenarijima.

5. SSL konfiguracija

Pogledajmo kako možemo konfigurirati SSL.

Koristit ćemo SslServerCustomizer klasa što je još jedna implementacija NettyServerCustomizer:

@Component javna klasa NettyWebServerFactorySslCustomizer implementira WebServerFactoryCustomizer {@Override public void customize (NettyReactiveWebServerFactory serverFactory) {Ssl ssl = new Ssl (); ssl.setEnabled (true); ssl.setKeyStore ("put do klase: sample.jks"); ssl.setKeyAlias ​​("alias"); ssl.setKeyPassword ("lozinka"); ssl.setKeyStorePassword ("tajno"); Http2 http2 = novi Http2 (); http2.setEnabled (lažno); serverFactory.addServerCustomizers (novi SslServerCustomizer (ssl, http2, null)); serverFactory.setPort (8443); }}

Ovdje smo definirali svojstva povezana s pohranom ključeva, onemogućili HTTP / 2 i postavili port na 8443.

6. Pristupite konfiguraciji dnevnika

Sada ćemo pogledati kako možemo konfigurirati evidentiranje pristupa pomoću Logback-a.

Spring Boot omogućuje nam konfiguriranje evidentiranja pristupa u datoteci svojstava aplikacije za Tomcat, Jetty i Undertow. Međutim, Netty još nema ovu podršku.

Da biste omogućili evidentiranje pristupa Netty-u, trebali bismo postaviti-Dreactor.netty.http.server.accessLogEnabled = true prilikom pokretanja naše aplikacije:

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

7. Zaključak

U ovom smo članku opisali kako konfigurirati poslužitelj Reactor Netty u aplikaciji Spring Boot.

Prvo, koristili smo opće mogućnosti konfiguracije temeljene na svojstvu Spring Boot. A onda smo istražili kako programski konfigurirati Netty na fino zrnati način.

Napokon, izvorni kod za ovaj članak dostupan je na Githubu.


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