Quarkus Reactive Client高负载下是否真的具备响应式能力?
关于Quarkus响应式REST客户端高负载慢后端场景的性能问题
我为测试Quarkus响应式REST客户端在慢后端场景下的表现,基于官方示例做了小幅修改并开展负载测试。使用的Quarkus版本为2.11.3.Final,build.gradle依赖如下:
dependencies { implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}") implementation 'io.quarkus:quarkus-rest-client-reactive' implementation 'io.quarkus:quarkus-resteasy-reactive' implementation 'io.quarkus:quarkus-arc' testImplementation 'io.quarkus:quarkus-junit5' testImplementation 'io.rest-assured:rest-assured' }
测试场景
设置了两种慢后端测试场景:
- 创建新Uni并延迟结果发射
- 调用本地运行的Go服务器(仅延迟1秒响应)
核心代码
对应的Resource代码:
@Path("/reactive") public class ReactiveResource { @RestClient TimeoutTestService service; @GET @Path("delay") @Produces(MediaType.TEXT_PLAIN) public Uni<String> reactiveThreadTimeout() { return Uni.createFrom().item("Hello RESTEasy") .onItem().delayIt().by(Duration.of(1, ChronoUnit.SECONDS)); } @GET @Path("remote") @Produces(MediaType.TEXT_PLAIN) public Uni<String> reactiveRemoteTimeout() { return service.testTimeoutReactive(); } }
对应的客户端接口代码:
@RegisterRestClient(baseUri = "http://localhost:8500") @Produces(MediaType.TEXT_PLAIN) public interface TimeoutTestService { @GET @Path("/reactive") Uni<String> testTimeoutReactive(); }
负载测试结果
第一种场景下,即使每秒300次请求,所有请求均能在1秒内响应,无任何问题;第二种场景在每秒20次请求时表现正常,但负载提升后响应时间逐渐增加,疑似调用线程被阻塞。我已排除Go服务器的问题(直接调用时它可轻松处理每秒300次请求),虽怀疑是本地同时运行Quarkus和Go服务器导致,但仍预期响应式客户端有更好表现。
请问是否有其他人在高负载下使用该响应式客户端时遇到类似问题?
内容的提问来源于stack exchange,提问作者bropyro
相关产品推荐
相关产品推荐

