内容简介:在本教程中,我们将在Spring Boot应用程序中查看Reactor Netty服务器的不同配置选项。最后,我们将展示一个展示不同配置方法的应用程序。在开始之前,让我们看一下Reactor Netty是什么以及它与Spring Boot的关系。
在本教程中,我们将在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
<b>public</b> <b>class</b> NettyWebServerFactoryPortCustomizer
implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> {
@Override
<b>public</b> <b>void</b> customize(NettyReactiveWebServerFactory serverFactory) {
serverFactory.setPort(8088);
}
}
Spring Boot将在启动期间选择我们的工厂自定义程序组件,并将配置服务器端口。
或者,我们可以实现NettyServerCustomizer:
<b>private</b> <b>static</b> <b>class</b> PortCustomizer implements NettyServerCustomizer {
<b>private</b> <b>final</b> <b>int</b> port;
<b>private</b> PortCustomizer(<b>int</b> port) {
<b>this</b>.port = port;
}
@Override
<b>public</b> HttpServer apply(HttpServer httpServer) {
<b>return</b> httpServer.port(port);
}
}
并将其添加到服务器工厂:
serverFactory.addServerCustomizers(<b>new</b> ProtocolCustomizer(8088));
在配置嵌入式Reactor Netty服务器时,这两种方法为我们提供了很大的灵活性。
此外,我们还可以从Netty框架访问ServerBootstrap类并在那里进行自定义:
<b>private</b> <b>static</b> <b>class</b> EventLoopNettyCustomizer implements NettyServerCustomizer {
@Override
<b>public</b> HttpServer apply(HttpServer httpServer) {
EventLoopGroup parentGroup = <b>new</b> NioEventLoopGroup();
EventLoopGroup childGroup = <b>new</b> NioEventLoopGroup();
<b>return</b> httpServer.tcpConfiguration(tcpServer -> tcpServer
.bootstrap(serverBootstrap -> serverBootstrap
.group(parentGroup, childGroup)
.channel(NioServerSocketChannel.<b>class</b>)));
}
}
但是,对于这种情况有一个警告。由于Spring Boot自动配置Netty服务器,我们可能需要通过显式定义NettyReactiveWebServerFactory bean 来跳过自动配置。
为此,我们应该在配置类中定义我们的bean并在那里添加我们的定制器:
@Bean
<b>public</b> NettyReactiveWebServerFactory nettyReactiveWebServerFactory() {
NettyReactiveWebServerFactory webServerFactory = <b>new</b> NettyReactiveWebServerFactory();
webServerFactory.addServerCustomizers(<b>new</b> EventLoopNettyCustomizer());
<b>return</b> webServerFactory;
}
接下来,我们将继续介绍一些常见的Netty配置方案。
SSL配置
我们来看看如何配置SSL。
我们将使用SslServerCustomizer 类,它是NettyServerCustomizer的另一个实现:
@Component
<b>public</b> <b>class</b> NettyWebServerFactorySslCustomizer
implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> {
@Override
<b>public</b> <b>void</b> customize(NettyReactiveWebServerFactory serverFactory) {
Ssl ssl = <b>new</b> Ssl();
ssl.setEnabled(<b>true</b>);
ssl.setKeyStore(<font>"classpath:sample.jks"</font><font>);
ssl.setKeyAlias(</font><font>"alias"</font><font>);
ssl.setKeyPassword(</font><font>"password"</font><font>);
ssl.setKeyStorePassword(</font><font>"secret"</font><font>);
Http2 http2 = <b>new</b> Http2();
http2.setEnabled(false);
serverFactory.addServerCustomizers(<b>new</b> SslServerCustomizer(ssl, http2, <b>null</b>));
serverFactory.setPort(8443);
}
}
</font>
这里我们定义了与密钥库相关的属性,禁用了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=<b>true</b>
结论
在本文中,我们已经介绍了如何在Spring Boot应用程序中配置Reactor Netty服务器。
首先,我们使用了一般的Spring Boot属性配置功能。然后,我们探讨了如何以细粒度的方式以编程方式配置Netty。
最后,本文的源代码可以 在Github上找到 。
以上所述就是小编给大家介绍的《Spring Boot Reactor Netty配置 | Baeldung》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 6、如何获取配置中心的配置
- React降级配置及Ant Design配置
- vscode 配置eslint 开发vue的相关配置
- git commit 规范校验配置和版本发布配置
- hadoop地址配置、内存配置、守护进程设置、环境设置
- 在hibernate中配置事务级别与命名查询配置【原创】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Introduction to Programming in Java
Robert Sedgewick、Kevin Wayne / Addison-Wesley / 2007-7-27 / USD 89.00
By emphasizing the application of computer programming not only in success stories in the software industry but also in familiar scenarios in physical and biological science, engineering, and appli......一起来看看 《Introduction to Programming in Java》 这本书的介绍吧!