Выбор ответа Junior Микросервисы и Spring Cloud спрашивают часто обновлено

Вызов без таймаута

Вопрос

Сервис A синхронно вызывает сервис B без таймаута. B начал отвечать по минуте. Что будет с A?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Потоки A зависнут, пул исчерпается, и A перестанет отвечать. HTTP-клиенты по умолчанию часто ждут очень долго или бесконечно.

Варианты ответа

  1. A автоматически получит ошибку через 30 секунд по таймауту JDK
  2. Ничего: проблемы B не влияют на остальные запросы A
  3. Потоки A зависнут, пул исчерпается, и A перестанет отвечатьправильный ответ
  4. A сам переключится на кешированные ответы B

Разбор

HTTP-клиенты по умолчанию часто ждут очень долго или бесконечно. Каждый висящий вызов держит поток A, и отказ B каскадом роняет A и тех, кто вызывает A. Отсюда правило: таймауты на каждый внешний вызов, плюс circuit breaker и bulkhead. Автоматического кеша нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме