намалете времето за изчакване на връзката на Wildfly

Имам проблем с недостига на ресурси на моето java приложение, работещо в wildfly. Той прави много API извиквания към други ресурси на REST и ако един от тези API:s се забави, нашата система също спира.

Случвало се е бекенд системите да не реагират в рамките на 14 секунди. Така че бих искал приложението ми да прекъсне връзката след може би 4 секунди. „Проблемът“ е, че използваме Client и ClientBuilder от javax.ws.rs.client и използваме wildfly като реализация.

Така че нямам представа как да задам този параметър за изчакване. Изглежда, че не е възможно от кода и съм доста загубен относно това коя подсистема на wildfly е засегната и какви свойства да задам.

Някой правил ли е това преди и знае ли как да настрои времето за изчакване?


person munHunger    schedule 22.03.2018    source източник


Отговори (3)


Можете да използвате клиентското свойство CONNECT_TIMEOUT Jersey за показване на тези публикации:

person Pablo Bastidas    schedule 22.03.2018
comment
Нямах представа, че това е стандартизирано в java ee 8... тъй като в момента сме на 7 и не използваме нито един от доставчиците, които сте свързали, вероятно трябва да надградя нашата среда до java EE 8 - person munHunger; 22.03.2018
comment
Мисля, че миграцията не е задължителна за използване на тази функция, тази публикация е публикуван през 2014 г., така че е в състояние в Джърси от преди време. Можете да опитате първо с версията, която вече имате, за да проверите дали наистина е необходима миграция. - person Pablo Bastidas; 23.03.2018
comment
И не забравяйте да маркирате отговора, ако това ви е помогнало да разрешите съмнението си :) - person Pablo Bastidas; 23.03.2018
comment
Да, просто исках да го изпробвам, преди да го одобря. В нашия конкретен случай обаче не използваме фланелка като реализация, което прави особено трудно тестването на това - person munHunger; 23.03.2018

Тъй като wildfly идва в пакет с resteasy, трябва да приложите таймаут за тази конкретна реализация. Това или принудете wildfly да използва нещо друго. Тъй като налагането на трико върху wildfly не изглеждаше като най-добрата идея (или най-лесната), аз го конфигурирах.

http://blog.eisele.net/2014/12/setting-timeout-for-jax-rs-20-resteasy-client.html

import javax.ws.rs.client.Client;
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;

 Client client = new ResteasyClientBuilder()
                .establishConnectionTimeout(100, TimeUnit.SECONDS)
                .socketTimeout(2, TimeUnit.SECONDS)
                .build();

и добавих следното в pom.xml:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client</artifactId>
        <version>3.0.19.Final</version>
    </dependency>
person munHunger    schedule 23.03.2018

Като се има предвид, че както establishConnectionTimeout, така и socketTimeout са остарели.

С това обяснение на jboss v7.3 от redhat уебсайт :

Следните методи, съвместими със спецификацията на ClientBuilder, заменят някои остарели RESTEasy методи:

  • Методът connectTimeout заменя метода establishConnectionTimeout.

    • The connectTimeout method determines how long the client must wait when making a new server connection.
  • Методът readTimeout замества метода socketTimeout.

    • The readTimeout method determines how long the client must wait for a response from the server.

Това проработи за мен с RestEASY 3.12.1.Final:

    private Client clientBuilder() {
        return new ResteasyClientBuilder()
            .connectTimeout(2, TimeUnit.SECONDS)
            .readTimeout(10, TimeUnit.SECONDS)
            .build();
    }
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>3.12.1.Final</version>
        </dependency>
person g.momo    schedule 15.02.2021