Spring Boot Reactor Netty配置 | Baeldung
在本教程中,我們將在Spring Boot應用程式中檢視Reactor Netty伺服器的不同配置選項。最後,我們將展示一個展示不同配置方法的應用程式。
什麼是Reactor Netty?
在開始之前,讓我們看一下Reactor Netty是什麼以及它與Spring Boot的關係。
Reactor Netty是一個非同步事件驅動的網路應用程式框架。它提供非阻塞和背壓就緒的TCP,HTTP和UDP客戶端和伺服器。顧名思義,它基於Netty框架。
現在,讓我們看看Spring和Spring Boot的位置。
Spring WebFlux是Spring框架的一部分,為Web應用程式提供反應式程式設計支援。如果我們在Spring Boot應用程式中使用WebFlux,Spring Boot會 自動將 Reactor Netty 配置為預設伺服器。除此之外,我們可以明確地將Reactor Netty新增到我們的專案中,Spring Boot應該再次自動配置它。
現在,我們將構建一個應用程式來了解如何自定義我們自動配置的Reactor Netty伺服器。之後,我們將介紹一些常見的配置方案。
首先,我們將新增所需的Maven依賴項。
要使用Reactor Netty伺服器,我們將在我們的pom檔案中新增spring-boot-starter-webflux作為依賴項:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> <version>2.1.3.RELEASE</version> </dependency> |
我們可以透過屬性檔案配置Netty伺服器。Spring Boot公開了應用程式屬性檔案中的一些常見伺服器配置:讓我們在application.properties中定義伺服器埠:
server.port=8088
除了伺服器埠,Spring Boot還有許多其他可用的伺服器配置選項。 以伺服器 字首開頭的屬性 允許我們覆蓋預設伺服器配置。我們可以在EMBEDDED SERVER CONFIGURATION部分的Spring文件中輕鬆查詢這些屬性。
現在,讓我們看一下如何透過程式碼配置嵌入式Netty伺服器。為此,Spring Boot為我們提供了WebServerFactoryCustomizer和NettyServerCustomizer類。
讓我們使用這些類來配置Netty埠,就像我們之前使用屬性檔案一樣:
@Component public class NettyWebServerFactoryPortCustomizer implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> { @Override public void customize(NettyReactiveWebServerFactory serverFactory) { serverFactory.setPort(8088); } } |
Spring Boot將在啟動期間選擇我們的工廠自定義程式元件,並將配置伺服器埠。
或者,我們可以實現NettyServerCustomizer:
private static class PortCustomizer implements NettyServerCustomizer { private final int port; private PortCustomizer(int port) { this.port = port; } @Override public HttpServer apply(HttpServer httpServer) { return httpServer.port(port); } } |
並將其新增到伺服器工廠:
serverFactory.addServerCustomizers(new ProtocolCustomizer(8088)); |
在配置嵌入式Reactor Netty伺服器時,這兩種方法為我們提供了很大的靈活性。
此外,我們還可以從Netty框架訪問ServerBootstrap類並在那裡進行自定義:
private static class EventLoopNettyCustomizer implements NettyServerCustomizer { @Override public HttpServer apply(HttpServer httpServer) { EventLoopGroup parentGroup = new NioEventLoopGroup(); EventLoopGroup childGroup = new NioEventLoopGroup(); return httpServer.tcpConfiguration(tcpServer -> tcpServer .bootstrap(serverBootstrap -> serverBootstrap .group(parentGroup, childGroup) .channel(NioServerSocketChannel.class))); } } |
但是,對於這種情況有一個警告。由於Spring Boot自動配置Netty伺服器,我們可能需要透過顯式定義NettyReactiveWebServerFactory bean 來跳過自動配置。
為此,我們應該在配置類中定義我們的bean並在那裡新增我們的定製器:
@Bean public NettyReactiveWebServerFactory nettyReactiveWebServerFactory() { NettyReactiveWebServerFactory webServerFactory = new NettyReactiveWebServerFactory(); webServerFactory.addServerCustomizers(new EventLoopNettyCustomizer()); return webServerFactory; } |
接下來,我們將繼續介紹一些常見的Netty配置方案。
SSL配置
我們來看看如何配置SSL。
我們將使用SslServerCustomizer 類,它是NettyServerCustomizer的另一個實現:
@Component public class NettyWebServerFactorySslCustomizer implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> { @Override public void customize(NettyReactiveWebServerFactory serverFactory) { Ssl ssl = new Ssl(); ssl.setEnabled(true); ssl.setKeyStore("classpath:sample.jks"); ssl.setKeyAlias("alias"); ssl.setKeyPassword("password"); ssl.setKeyStorePassword("secret"); Http2 http2 = new Http2(); http2.setEnabled(false); serverFactory.addServerCustomizers(new SslServerCustomizer(ssl, http2, null)); serverFactory.setPort(8443); } } |
這裡我們定義了與金鑰庫相關的屬性,禁用了HTTP / 2,並將埠設定為8443。
訪問日誌配置
現在,我們將瞭解如何使用Logback配置訪問日誌記錄。
Spring Boot允許我們在Tomcat,Jetty和Undertow的應用程式屬性檔案中配置訪問日誌記錄。但是,Netty目前還沒有這種支援。
要啟用Netty訪問日誌記錄,我們應該 在執行應用程式時設定-Dreactor.netty.http.server.accessLogEnabled = true:
mvn spring-boot:run -Dreactor.netty.http.server.accessLogEnabled=true |
結論
在本文中,我們已經介紹瞭如何在Spring Boot應用程式中配置Reactor Netty伺服器。
首先,我們使用了一般的Spring Boot屬性配置功能。然後,我們探討了如何以細粒度的方式以程式設計方式配置Netty。
最後,本文的原始碼可以在Github上找到。
相關文章
- Spring Boot面試問題| BaeldungSpring Boot面試
- 基於Spring Batch的Spring Boot的教程 - BaeldungBATSpring Boot
- 在Spring Boot設定Swagger 2 - BaeldungSpring BootSwagger
- GraphQL SPQR和Spring Boot入門 | baeldungSpring Boot
- Netty與Reactor模型NettyReact模型
- 通過Spring Boot Webflux實現Reactor KafkaSpring BootWebUXReactKafka
- Spring Boot:Spring Boot配置MybatisSpring BootMyBatis
- Spring Boot:Spring Boot配置SwaggerSpring BootSwagger
- 加快Spring Boot啟動的幾種方法 | baeldungSpring Boot
- Spring Boot & 配置Spring Boot
- Spring Boot的Clean架構教程與原始碼 - BaeldungSpring Boot架構原始碼
- 聊聊reactor-netty的AccessLogReactNetty
- spring boot 配置 JPASpring Boot
- Spring Boot核心配置Spring Boot
- 在Spring Batch中配置重試邏輯 - BaeldungSpringBAT
- 04-spring-boot-resttemplate netty定製使用SpringbootRESTNetty
- Netty原始碼解析2-ReactorNetty原始碼React
- Netty原始碼分析--Reactor模型(二)Netty原始碼React模型
- Spring boot學習(二) Spring boot基礎配置Spring Boot
- Spring Boot學習筆記:Spring Boot核心配置Spring Boot筆記
- Spring Boot專案的推薦軟體包結構 - BaeldungSpring Boot
- 使用Spring Boot排程WebSocket推送的教程和原始碼 - BaeldungSpring BootWeb原始碼
- Spring Boot 配置檔案Spring Boot
- Spring Boot中配置 AuditListenerSpring Boot
- spring boot 配置外接tomcatSpring BootTomcat
- Spring Boot Security配置教程Spring Boot
- Spring Boot 配置介面 WebMvcConfigurerSpring BootWebMVC
- Spring Boot 支援 JSP配置Spring BootJS
- 【Spring Boot】yaml配置注入Spring BootYAML
- Spring Boot日誌配置Spring Boot
- 【Spring Boot】整合Netty Socket.IO通訊框架Spring BootNetty框架
- Spring Boot微服務中的十二因子方法論(12Factor) - BaeldungSpring Boot微服務
- Spring boot學習(八)Spring boot配置ehcache快取框架Spring Boot快取框架
- Spring boot學習(九)Spring boot配置郵件傳送Spring Boot
- Spring Boot + Mybatis + Spring MVC環境配置(三):DataSource配置Spring BootMyBatisMVC
- Spring Boot logback日誌配置Spring Boot
- Spring Boot 自動配置原理Spring Boot
- Web Socket 效能對比——Spring Boot vs Tomcat vs NettyWebSpring BootTomcatNetty