在Jboss上为JAX-RS 2.0 / Resteasy Client设置超时

时间:2018-11-16 10:44:20

标签: java rest jersey resteasy

我想为每个调用剩余客户端设置请求超时。目前我有这个:

    private Client clientBuilder() {
    return new ResteasyClientBuilder()
            .establishConnectionTimeout(2, TimeUnit.SECONDS)
            .socketTimeout(10, TimeUnit.SECONDS)
            .build()
            .register(ClientRestLoggingFilter.class)
            .register(ObjectMapperContextResolver.class);
}

问题是,除了get之外,其他方法可能不起作用。 而且,套接字超时不是读取完整响应的超时,而是单个数据包的超时。 socketTimeout and connectionTimeout information

我正在寻找类似以下球衣的RestEasy解决方案:

import org.glassfish.jersey.client.ClientProperties;

ClientConfig configuration = new ClientConfig();
configuration.property(ClientProperties.CONNECT_TIMEOUT, 1000);
configuration.property(ClientProperties.READ_TIMEOUT, 1000);
Client client = ClientBuilder.newClient(configuration);

1 个答案:

答案 0 :(得分:1)

正如 redhat website 在 jboss v7.3 上所解释的:

<块引用>

以下符合 ClientBuilder 规范的方法替换了某些已弃用的 RESTEasy 方法:

  • connectTimeout 方法取代了 establishConnectionTimeout 方法。

    • connectTimeout 方法确定客户端在建立新的服务器连接时必须等待多长时间。
  • readTimeout 方法取代了 socketTimeout 方法。

    • readTimeout 方法确定客户端必须等待服务器响应的时间。

所以这应该适合你的情况:

    private Client clientBuilder() {
        return new ResteasyClientBuilder()
            .connectTimeout(2, TimeUnit.SECONDS)
            .readTimeout(10, TimeUnit.SECONDS)
            .build()
            .register(ClientRestLoggingFilter.class)
            .register(ObjectMapperContextResolver.class);
    }