уменьшить время ожидания соединения Wildfly

У меня проблема с нехваткой ресурсов в моем Java-приложении, работающем в wildfly. Он делает много вызовов API к другим ресурсам REST, и если один из этих API замедляется, наша система также выходит из строя.

Бывало, что серверные системы не отвечали в течение 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 использовать что-то еще. Так как форсировать трикотаж на дикой мухе не казалось лучшей идеей (или самой простой), я пошел с настройкой.

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

Учитывая, что и installConnectionTimeout, и socketTimeout устарели.

С этим объяснением по jboss v7.3 от redhat сайт :

Следующие методы, соответствующие спецификации ClientBuilder, заменяют некоторые устаревшие методы RESTEasy:

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

    • 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