首页 > 解决方案 > 在单个应用程序上下文中使用 Netty 的 Tomcat

问题描述

我有一个使用 tomcat 的 spring 应用程序,我想将 netty 作为并行 web 服务器运行并在两者之间共享应用程序上下文,我将 web 通量启动器与 web 连接在一起,但只有 tomcat 在属性中指定的端口上启动.`@Configuration 类 NettyConfiguration {

@Bean
fun nettyReactiveWebServerFactory(): NettyReactiveWebServerFactory {
    val webServerFactory = NettyReactiveWebServerFactory()
    webServerFactory.addServerCustomizers(EventLoopNettyCustomizer())
    return webServerFactory
}

private class EventLoopNettyCustomizer : NettyServerCustomizer {
    override fun apply(httpServer: HttpServer): HttpServer {
        val parentGroup: EventLoopGroup = NioEventLoopGroup()
        val childGroup: EventLoopGroup = NioEventLoopGroup()
        return httpServer.port(8084)
            .tcpConfiguration { tcpServer ->
                tcpServer
                    .bootstrap { serverBootstrap ->
                        serverBootstrap
                            .group(parentGroup, childGroup)
                            .channel(NioServerSocketChannel::class.java)
                    }
            }
    }
}

}`

标签: springtomcatwebsocketnettyreactor

解决方案


试试这个:

@Configuration
public class CustomWebServerConfig {

    private final HttpHandler httpHandler;

    public CustomWebServerConfig(HttpHandler httpHandler) {
        this.httpHandler = httpHandler;
    }

    @PostConstruct
    public void customPortNettyWebServer() {
        var factory = new NettyReactiveWebServerFactory(8082);
        var webServer = factory.getWebServer(httpHandler);
        webServer.start();
    }
}

推荐阅读