我想要探索Quarkus的react 式REST客户端的慢速后端,并在他们建议的示例(https://github.com/quarkusio/quarkus-quickstarts/tree/main/rest-client-reactive-quickstart)上进行了一些负载测试,只做了一些微小的修改. 我的build.gradle中有以下依赖项,Quarkus版本设置为2.11.3.最终:
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并延迟其emits
- 调用本地运行的围棋服务器,该服务器只需等待一秒钟即可响应(可在此处找到:https://gist.github.com/s-macke/c3b1d0029ef61efc7ed2d22a4132cad2)
我的资源和客户端调用后端如下所示:
@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();
}
在负载测试中,我对第一个变量没有任何问题,所有请求都在1秒内得到响应,即使是每秒300个请求.在第二个变种中,它在20RPS下工作得很好,但随着负载的增加,响应时间会慢慢增加,就像有什么东西阻塞了调用线程一样.我可以排除GO服务器,因为当直接调用它时,它可以处理300 RPS而不会出现问题.也许问题是由于Quarkus和Go服务器都在我的本地机器上运行,但我仍然希望使用被动客户端获得更好的结果. 在使用超过基本负载的react 式客户端时,是否有其他人观察到类似的问题?