我想要探索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'
}

我想判断具有两个变体的慢速应答后端的行为

我的资源和客户端调用后端如下所示:

@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 式客户端时,是否有其他人观察到类似的问题?

推荐答案

你快到https://github.com/quarkusio/quarkus/issues/21884岁了.这看起来可能出乎意料,但客户端有一个默认大小为20的连接池.如果您想允许超过20个的并发请求,可以重新配置:

quarkus.rest-client."com.example.TimeoutTestService".connection-pool-size=100

Java相关问答推荐

是否有一种格式模式,可以在除0之外的数字前面有正负符号?

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

Java:根据4象限中添加的行数均匀分布行的公式

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

所有 case 一起输入时输出错误,而单独放置时输出正确

使用REST客户端和对象映射器从字符串反序列化Json

使用Mockito进行的Junit测试失败

如何在Java中从XML中获取特定的 node ,然后将其删除?

带错误BER验证的itext8签名返回pdf

用户填充的数组列表永不结束循环

我的Spring Boot测试显示&IlLegalStateException:无法加载某事的ApplicationContext.

Domino Designer 14中的保存代理添加了重影库

如何使用log4j2(Json)记录由";异常引起的所有";?

如何在Jooq中获取临时表列引用?

从Spring6中的JPMS模块读取类时出现问题

在打开搜索结果时,如何让Eclipse打开整个文件?

在Java Spring JPA中插入包含对其他实体的引用的列

按长度排序字符串数组

错误:JOIN/ON的参数必须是boolean类型,而不是bigint类型.Java Spring启动应用程序

如何在Java中调用对象上预定义的接口方法列表?