You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在reactor-netty服务端读取请求体并解决block()阻塞报错问题

错误原因

Reactor Netty 基于全异步非阻塞的响应式模型设计,其内置的IO线程(reactor-http-nio-* 线程)不允许执行任何阻塞操作,你代码中调用 mono.block() 属于阻塞操作,直接触发了框架的线程防护校验,因此抛出对应异常。

解决方案

不需要通过阻塞的方式获取请求体,直接利用响应式流的链式操作,在请求体读取完成后再构造返回响应即可,修改后的可运行代码如下:

public static void main(String[] args) throws IOException {
    Consumer<Throwable> onError = (Throwable ex) -> {
        System.out.println(ex.getMessage());
    };
    Runnable onCompletion = () -> {
        System.out.println("Message Completed");
    };

    DisposableServer server = HttpServer.create()
            .handle((httpServerRequest, httpServerResponse) ->
                // 全程走非阻塞链式处理,无需主动阻塞
                httpServerRequest.receive()
                        .aggregate()
                        .asByteArray()
                        .doOnNext(bytes -> {
                            // 此处可直接获取请求体字节数组,做打印、解析逻辑都可在此处处理
                            System.out.println("读取到的请求体内容:" + new String(bytes));
                        })
                        .doOnError(onError)
                        .doOnTerminate(onCompletion)
                        .flatMap(bytes -> {
                            // 此处可根据请求体内容自定义响应内容,示例:匹配请求体返回对应内容
                            String respContent;
                            if("12312321312".equals(new String(bytes))){
                                respContent = "已匹配到你传入的请求体内容";
                            }else {
                                respContent = "Hello world";
                            }
                            return httpServerResponse.sendString(Mono.just(respContent));
                        })
            )
            .host("localhost")
            .port(45441)
            .bindNow();
    System.in.read();
    server.disposeNow();
}

验证方式

直接使用你原有的curl命令调用即可,代码运行后调用curl可以正常拿到响应,控制台也会输出你传入的请求体内容。

内容的提问来源于stack exchange,提问作者Lorna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:27:03