SpringCloud openFeign решение тайм-аута удаленного вызова
SpringCloud openFeign решение тайм-аута удаленного вызова

SpringCloud openFeign решение тайм-аута удаленного вызова

краткое содержание:

Возможные тайм-ауты при совершении удаленных вызовов с помощью Spring Cloud OpenFeign,И предоставляет метод решения вопроса о тайм-ауте. Путем разумных настроек конфигурации,Разработчики могут эффективно предотвращать тайм-ауты удаленных вызовов из-за задержек в сети и т. д.,Обеспечить стабильность и надежность системы.

введение:

Spring Cloud OpenFeign — это платформа для упрощения удаленных вызовов Служить в рамках микроархитектуры Служить. Однако при фактическом использовании из-за задержки в сети, задержки ответа терминала и т. д. удаленные вызовы могут истечь по тайм-ауту, что приведет к снижению производительности системы или даже к сбою. Чтобы решить этот вопрос, в этой статье будут представлены некоторые методы эффективной борьбы с Spring. Cloud Таймаут удаленного вызова OpenFeign обеспечивает стабильную работу системы.

Решение:

  1. Установить тайм-аут: существоватьOpenFeignиз Конфигурацияв файле,Вы можете ограничить время удаленных вызовов, установив такие параметры, как таймаут подключения и таймаут чтения. Путем соответствующей настройки этих параметров,Вы сможете избежать долгого ожидания ответов от удаленных Служить.
  2. Используйте автоматический выключатель: Может комбинироваться с предохранителями, такими как Hystrix.,Ухудшение обработки в случае сбоя удаленных вызовов или истечения времени ожидания,Вернуть значение по умолчанию или сообщение об ошибке,Избегайте единичного отказа дистанционного управления, влияющего на всю систему.
  3. Оптимизируйте сетевое общение: Вы можете оптимизировать Конфигурацию сети, использовать балансировку нагрузки и т. д.,Уменьшите задержку сети,Повысьте стабильность удаленных вызовов.

текст

вопрос

При использовании openFein для удаленного вызова время ожидания вызова истекает, и появляется следующее сообщение об ошибке:

Язык кода:javascript
копировать
com.netflix.hystrix.exception.HystrixRuntimeException: XXXService#login(RequestObject) timed-out and no fallback available.
причина

OpenFeign Интегрировано внутриHytrix и Ribbon компонент, если установлен

Язык кода:javascript
копировать
feign:
  hystrix:
    # Используйте имитацию автоматического выключателя
    enabled: true

, что эквивалентно включению автоматического выключателя, то время ожидания вызова будет зависеть от Ribbon и Hytrix Тот, который меньше, идет на настройку.


Пополнить: существоватьпредставилopenFeinПосле компонента,Содержимое, которое можно настроить, следующее:

Язык кода:javascript
копировать
1. Доступные части Hystrix:

hystrix.command.default.execution.timeout.enable=true //Если это значение false, то управление таймаутом имеет управление лентой. Если оно истинно, используются оба таймаута hystrix и таймаут ленты, но вступает в силу тот, который меньше. Значение по умолчанию — true.

hystrix.command.default.execution.isolation.thread.timeoutInMilliсекунды=3000//Тайм-аут предохранителя по умолчанию составляет 1 секунду, наиболее часто изменяемый параметр

circuitBreaker.requestVolumeThreshold=20 //Минимальное количество запросов на срабатывание автоматического выключателя, по умолчанию 20

circuitBreaker.sleepWindowInMilliseconds=5000 //Продолжительность сна, по умолчанию 5 секунд

circuitBreaker.errorThresholdPercentage=50 //Минимальная доля неудачных запросов, вызывающих срабатывание автоматического выключателя, по умолчанию 50 %.

2. Части ленты, которые можно использовать:

ribbon.ReadTimeout=1000 //Таймаут обработки запросов, по умолчанию 1 секунда

ribbon.ConnectTimeout=1000 //Длительность таймаута устанавливается при подключении, по умолчанию 1 секунда

ribbon.MaxAutoRetries=1 //Максимальное количество повторов для одного и того же экземпляра, кроме первого вызова, значение по умолчанию — 1

ribbon.MaxAutoRetriesNextServer=0 //Максимальное количество повторных попыток других экземпляров балансировки нагрузки, исключая первый вызов, по умолчанию — 0 раз

ribbon.OkToRetryOnAllOperations=false //Повторять ли все операции, по умолчанию false

 3. Притвориться, что можно. Конфигурация деталей:

feign.hystrix.enable=false //Независимо от того, включает ли feign автоматический выключатель, значение по умолчанию — false

Примечания к ленте:

  1. Для Ribbon есть два таймаута: таймаут соединения и таймаут обработки.,По умолчанию — 1 секунда.
  2. У ленты также есть две попытки по умолчанию: количество повторов для одного и того же экземпляра и количество повторов для разных экземпляров балансировки нагрузки.,По умолчанию — 1 раз и 0 раз.

То есть, если существует только один экземпляр, время ожидания соединения повторяется один раз, а время ожидания обработки также повторяется один раз. То есть фактическое время ожидания ленты составляет 1 секунда × 2 + 1 секунда × 2 = 4 секунды.

  1. По умолчанию Ribbon будет повторять запросы GET независимо от того, произошел ли сбой соединения или не удалось его обработать, тогда как запросы, отличные от GET, будут повторять попытки только в случае сбоя соединения.

Вывод: настройте таймаут InMillisec для Hystrix так, чтобы он был больше, чем для Ribbon (ConnectTimeout + ReadTimeout) × 2. Цель состоит в том, чтобы гарантировать, что удаленный вызов будет завершен до срабатывания автоматического выключателя (включая время повтора Ribbon).

Шаги настройки Шаги настройки:
Язык кода:javascript
копировать
1. Включите переключатель Feign's Hystrix.

feign:
  hystrix:
    enabled: true
2. Установить продолжительность тайм-аута Hystrix

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 15000
3. Длительность соединения и время ответа для ленты Конфигурация

ribbon:
  ConnectTimeout: 2000
  ReadTimeout: 5000
решать

Примечание версии: SpringBoot:2.3.3.Release, OpenFeign: 2.2.7.Release КонфигурациянижеFeignиз Конфигурация:

Язык кода:javascript
копировать
feign:
  hystrix:
    # Используйте имитацию автоматического выключателя
    enabled: true
    strategy:
      custom: true  # Индивидуальная стратегия имитации автоматического выключателя
  httpclient:
    enabled: true
  okhttp:
    enabled: false

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 15000

ribbon:
  ConnectTimeout: 2000
  ReadTimeout: 5000

Вопросрешить, удаленный звонок микро-Служить прошел успешно.

Подведите итог:

Spring Cloud OpenFeign как фреймворк для удаленных звонков под архитектурой микро-Служить,В реальных приложениях вы можете столкнуться с тайм-аутом удаленного вызова. В ответ на этот вопрос,В этой статье представлены такие методы, как установка времени ожидания, использование механизма автоматического выключателя и оптимизация сетевой связи. С помощью разумных технических средств,Может эффективно решить вопрос о тайм-ауте удаленного вызова,Повысить надежность системыпроизводительности.

Ссылки:

  1. Официальная документация Spring Cloud OpenFeign: [Ссылка]
  2. “Spring Microservices in Action” by John Carnell, Manning Publications, 2017.
  3. “Mastering Spring Cloud” by Thomas Uphill, Packt Publishing, 2020.
  4. “Spring Cloud for Microservices Compared to Kubernetes” by Richard Chesterwood, Apress, 2021.
  5. «Центр программного обеспечения с открытым исходным кодом Netflix — Hystrix»: [Ссылка]
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода