我想在我的 Spring Boot Webflux 项目中自定义 Netty。在我的 POM 中,我添加了 Spring Boot Webflux 和 Spring Boot Actuator 依赖项。接下来,我重写了 WebServerFactoryCustomizer 的customize() 方法,如 Spring documentation 中所述。 .
@Component
public class NettyConfiguration implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> {
@Override
public void customize(NettyReactiveWebServerFactory factory) {
factory.addServerCustomizers(new NettyCustomizer());
}
}
然后我在 NettyCustomizer 中实现了 Netty 引导:
public class NettyCustomizer implements NettyServerCustomizer {
private final EventLoopGroup bossGroup = new NioEventLoopGroup(22);
private final EventLoopGroup workerGroup = new NioEventLoopGroup();
@Override
public HttpServer apply(HttpServer httpServer) {
return httpServer.tcpConfiguration(tcpServer ->
tcpServer.bootstrap(serverBootstrap ->
serverBootstrap
.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.DEBUG))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(final SocketChannel socketChannel) {
socketChannel.pipeline().addLast(new BufferingInboundHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true))
.port(8899)
);
}
}
现在,如果我启动 Spring Boot 应用程序,我会收到“无法启动 Netty”错误。
org.springframework.boot.web.server.WebServerException: Unable to start Netty
Caused by: java.lang.IllegalStateException: group set already
因此,如果使用 Webflux,似乎无法覆盖 Netty 引导。不幸的是,将customize() 方法中的addServerCustomizers() 方法更改为setServerCustomizers() 会导致相同的异常。有人知道如何与 Spring Boot 一起定制 Netty 吗?
最佳答案
如果想替换成自己的服务器,需要从pom.xml中删除一些netty的依赖。但是,如果你想配置管道或类似的东西,我想你可以在 Spring Boot 中操作 Web 服务器配置,如下所示;
@Override
public void customize(WebServerFactory factory) {
NettyReactiveWebServerFactory nettyReactiveWebServerFactory = (NettyReactiveWebServerFactory) factory;
nettyReactiveWebServerFactory.addServerCustomizers(builder -> builder
.tcpConfiguration(tcpServer -> tcpServer.bootstrap(i -> i.handler(new ObjectEchoServerHandler("1")))));
}
关于java - 如何使用 Spring Boot 2.1 Webflux 定制 Netty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53948033/