Я новичок в Spring Cloud Netflix и имею некоторые вопросы относительно этого.
Я использую API шлюз вместе с Hystrix работает на приграничном сервере Zuul, и я хотел бы, чтобы убедиться, если я понимаю следующее поведение правильно:Вспомогательные методы на сервере Zuul Весеннее облако
я убить microservice работает «за» Шлюз API затем я заставляю Hystrix к откройте схему. После этого (примерно 10 секунд) я отправляю запрос на нерабочую микросервис и получаю сообщение TIMEOUT. Однако, когда я отправляю много (десятков) запросов за очень короткое время (до 1 секунды), я получаю ошибку SHORTCIRCUIT OPEN.
Я был удивлен, почему я получаю сообщение об ошибке TIMEOUT, хотя схема разомкнута, и поэтому гитрика должна появиться, чтобы избежать подобных сбоев. Но я думаю, причина в том, что если время с момента последнего запроса> circuitBreaker.sleepWindowInMilliseconds, тогда Gateway API пытается снова подключиться к микросервису, чтобы проверить, жив ли он, но это не так, поэтому -> TIMEOUT. Это также объясняет, почему я получил короткую ошибку SHORTCIRCUIT OPEN по многим запросам за короткое время.
Следующая вещь, что, как я получаю «Timeout» или ошибка «Короткое замыкание» Я получил:
HystrixRuntimeException: Microservice (timed-out | short-circuited) and no fallback available
Как я могу указать запасной вариант на Zuul сервере (это может быть одинаковым для всех маршрутов) к избегать этого исключения?
То, что я не пытался до сих пор:
Согласно this к я установить стратегию изоляции выполнения нитку , чтобы избежать тайм-аут:
Hystrix: command.default.execution.isolation.strategy: НИТКИ
, но после того, как смотреть на hystrix.stream я получил propertyValue_executionIsolationStrategy":"SEMAPHORE"
- Кажется, есть подсказка для решения на github, написав пользовательский RibbonCommand и переопределяя getFallback(), но посмотрев на интерфейс RibbonCommand. Я узнал, что ни RibbonCommand, ни его суперинтерфейсы не определяют такой метод.
Мой API Служба шлюза:
@SpringBootApplication
@EnableSidecar // This annotation includes @EnableCircuitBreaker, @EnableDiscoveryClient, and @EnableZuulProxy
@EnableHystrixDashboard
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
}
application.yml
server:
port: 10000
sidecar:
port: 8000
endpoints:
restart:
enabled: true
shutdown:
enabled: true
health:
sensitive: false
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8761/eureka/
zuul:
routes:
microservice:
path: /microservice/**
hystrix:
command.default.execution.isolation.strategy: THREAD
debug: true
Вы должны подумать о том, чтобы поместить номер версии, чтобы помочь правильному пользователю изменить версию/версию, которая решает их проблему. – scicalculator
Удивительно, сколько вещей я пропускаю в официальной весенней документации.Не удалось выяснить, почему мои резервные методы не вызывались для отказа от маршрутов url. +1 – Bal