Почему использование tapeReadTimeout не прерывает длинный запрос с помощью ленты Netflix?

Мы используем Spring Boot 2.0.0.RELEASE с весеннее облако-стартер-лента-netflix для наших микросервисов. Я установил ribbon.readTimeout=1000 на медленные запросы и проверяю его с помощью нашей точки останова настройки микросервиса внутри метода @GetMapping, не отправляя ответа. В моем тесте я ждал 10 минут и не получил никаких исключений. Похоже, что readTimeout вообще отсутствует.

Конфигурация услуги

ribbon:
  ReadTimeout: 1000

my-service:
  ribbon:
    eureka:
      enabled: false
    listOfServers: localhost:8080
    ReadTimeout: 1000
    ConnectTimeout: 1000

Единственный способ заставить его работать - это ribbon.restclient.enabled=true. Но этот клиент устарел, и я не хочу его использовать.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
0
6 583
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Не все свойства ленты поддерживаются spring-cloud-netflix при использовании с Spring RestTemplate. Некоторые свойства ленты работают, как описано в документы, но ReadTimeout не входит в их число. Так что это не работает, но это по дизайну (согласно ответу на этот проблема). Однако, если вы используете Spring RestTemplate, вы можете установить его прямо там, например:

@LoadBalanced
@Bean
RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
    return restTemplateBuilder
        .setReadTimeout(2000)
        .build();
}

Спасибо Вам большое. Я установил тайм-аут запроса для RestTemplate, и теперь он работает нормально.

Alexey Saltanov 21.11.2018 12:18

@AlexeySaltanov Я рад, что это помогло. Поскольку он решил вашу проблему, не могли бы вы отметить этот ответ как принятый и поставить ему +1?

OlgaMaciaszek 21.11.2018 12:24

Я попытался установить это свойство тайм-аута в своем application.yml, но получил сообщение «Неизвестное свойство 'tape.ReadTimeout'». Этот способ сработал отлично!

Georgina Diaz 12.04.2020 02:55

Мы находим это:

serviceA.ribbon.ReadTimeout=8000

хорошо работать с Spring Boot 2.1.0.RELEASE, используя Spring Cloud Finchley.SR2 и

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

Однако в клиенте мы используем ленту через симуляцию так:

@FeignClient(value = "serviceA")
public interface ServiceAClient {

    @GetMapping(value = "/test")
    String getTest();
}

Затем мы используем тестовый макет, чтобы ввести фиксированную задержку сверх таймаута чтения, чтобы убедиться, что он работает нормально.

Думаю, нужно настроить таймауты Hystrix. Взгляните на эту часть документации: http://cloud.spring.io/spring-cloud-static/Edgware.RELEASE/single/spring-cloud.html#_hystrix_timeouts_and_ribbon_clients Это могло быть что-то вроде этого:

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 1100
ribbon:
  ConnectTimeout: 1000
  ReadTimeout: 1000

Другие вопросы по теме

Похожие вопросы

SpringBoot не сканирует именованные пакеты
Безопасность Spring boot OAuth 2 получить токен доступа из токена обновления (если срок его действия истек)
Junit Mockito NullPointerException для Mock для автоматического подключения на основе конструктора
Почему эта ошибка, показывающая «MessageContext не может быть разрешена для типа» при весенней загрузке?
Какая библиотека / модуль лучше всего и должен ли я использовать для загрузки нескольких файлов из формы, если я использую реакцию во внешнем интерфейсе и загрузку Spring в бэкенде?
Проблема с политикой CORS при использовании остальной службы (Spring Boot) из приложения Angular5
Получение java.sql.SQLRecoverableException: закрытое соединение в приложении весенней загрузки
Сервер отправил события с помощью sseemitter, и на ответ требуется больше времени
Регистрация микросервисов без пользовательского интерфейса Jhipster с доступом к шлюзу
AWS EC2 - не удается запустить веб-сервис весенней загрузки извне, но работает нормально на локальном хосте