Как установить соединение и считать тайм-аут с Jersey 2.x?

В Джерси 1 у нас была функция setConnectTimeout в классе com.sun.jersey.api.client.Client,

В майке 2 javax.ws.rs.client.Client класс используется там, где эта функция отсутствует.

Как установить тайм-аут соединения и тайм-аут чтения в Джерси 2.x?

2 ответа

Решение

Код ниже работает для меня в Джерси 2.3.1 (вдохновение можно найти здесь: /questions/16487194/javaxwsrsclientclient-kak-nastroit-readtimeout/16487201#16487201)

public static void main(String[] args) {
    Client client = ClientBuilder.newClient();

    client.property(ClientProperties.CONNECT_TIMEOUT, 1000);
    client.property(ClientProperties.READ_TIMEOUT,    1000);

    WebTarget target = client.target("http://1.2.3.4:8080");

    try {
        String responseMsg = target.path("application.wadl").request().get(String.class);
        System.out.println("responseMsg: " + responseMsg);
    } catch (ProcessingException pe) {
        pe.printStackTrace();
    }
}

Вы также можете указать время ожидания для каждого запроса:

public static void main(String[] args) {
    Client client = ClientBuilder.newClient();
    WebTarget target = client.target("http://1.2.3.4:8080");

    // default timeout value for all requests
    client.property(ClientProperties.CONNECT_TIMEOUT, 1000);
    client.property(ClientProperties.READ_TIMEOUT,    1000);

    try {
        Invocation.Builder request = target.request();

        // overriden timeout value for this request
        request.property(ClientProperties.CONNECT_TIMEOUT, 500);
        request.property(ClientProperties.READ_TIMEOUT, 500);

        String responseMsg = request.get(String.class);
        System.out.println("responseMsg: " + responseMsg);
    } catch (ProcessingException pe) {
        pe.printStackTrace();
    }
}

Начиная с jersey 2.26 (который использует JAX-RS 2.1) для этого есть новые методы:

ClientBuilder builder = ClientBuilder.newBuilder()
        .connectTimeout(5000, TimeUnit.MILLISECONDS)
        .readTimeout(5000, TimeUnit.MILLISECONDS);
        //some more calls if necesary, e.g.
        //.register(LoggingFilter.class);
            
        Client restClient = builder.build();
Другие вопросы по тегам