添加quarkus-amazon-lambda-http后Quarkus REST API响应异常挂起
Quarkus大响应体返回异常(引入quarkus-amazon-lambda-http后)
问题现象
- 未引入
quarkus-amazon-lambda-http依赖时,GET端点可正常返回10000+条数据的大响应 - 添加该依赖后,响应大小被严格限制:返回50条数据正常,100条则失效
- 本地运行时,接口返回200 OK但无响应体,客户端(Postman、浏览器、curl)会无限挂起等待
已尝试操作:
- 切换响应式/非响应式依赖组合
- 更换Quarkus版本(如3.6.0),问题依旧
相关代码
资源类(ExampleResource.java)
import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import java.util.ArrayList; import java.util.Date; import java.util.List; @Path("/cars") public class ExampleResource { @GET @Produces(MediaType.APPLICATION_JSON) public List<Car> cars() { List<Car> carList = new ArrayList<>(); // 仅50条数据时正常;无lambda依赖时10000+条也正常 for (int i = 0; i < 100; i++) { carList.add(new Car(Long.valueOf(i), "Car(" + i + ")", Double.valueOf(i) * 100, Double.valueOf(i) + 100, Double.valueOf(i), new Date(), new Date())); } return carList; } }
模型类(Car.java)
import lombok.AllArgsConstructor; import lombok.Data; import java.util.Date; @Data @AllArgsConstructor public class Car { private Long id; private String name; private Double weight; private Double length; private Double width; private Date dateBuilt; private Date dateAdded; }
pom.xml配置
<properties> <compiler-plugin.version>3.11.0</compiler-plugin.version> <maven.compiler.release>17</maven.compiler.release> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <quarkus.platform.artifact-id>quarkus-bom</quarkus-platform.artifact-id> <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id> <quarkus.platform.version>3.6.4</quarkus.platform.version> <skipITs>true</skipITs> <surefire-plugin.version>3.1.2</surefire-plugin.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>${quarkus.platform.artifact-id}</artifactId> <version>${quarkus.platform.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-arc</artifactId> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive-jackson</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive-jsonb</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-amazon-lambda-http</artifactId> </dependency> </dependencies>
解决方案
1. 移除重复JSON序列化依赖
pom.xml中同时引入了quarkus-resteasy-reactive-jackson和quarkus-resteasy-reactive-jsonb,二者会导致序列化逻辑冲突,保留其中一个即可。推荐移除quarkus-resteasy-reactive-jsonb:
<!-- 移除该冲突依赖 --> <!-- <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive-jsonb</artifactId> </dependency> -->
2. 增大Lambda HTTP响应缓冲区
在application.properties中添加配置,调整响应缓冲区大小(根据实际响应体量设置,示例为10MB):
quarkus.amazon-lambda.http.response-buffer-size=10485760
3. 排查本地运行日志
若本地运行仍有挂起问题,开启DEBUG日志排查序列化异常:
quarkus.log.category."io.quarkus.amazon.lambda.http".level=DEBUG quarkus.log.category."io.quarkus.resteasy.reactive".level=DEBUG
原理说明
引入quarkus-amazon-lambda-http后,Quarkus切换为Lambda HTTP适配层处理请求响应,该适配层默认缓冲区较小;同时多个JSON序列化依赖会引发逻辑冲突,最终导致大响应体无法正常输出。
内容的提问来源于stack exchange,提问作者Stan Ostrovskii
相关产品推荐
相关产品推荐

