2016-06-10 2 views
1

스프링 클라우드 넷플릭스를 처음 접하고 그것에 관해 몇 가지 질문이 있습니다.
내가 Hystrix이 Zuul 에지 서버에서 실행과 함께 API 게이트웨이를 사용하고 그리고 난 내가 제대로 다음과 같은 행동을 이해하는 경우 있는지 확인하고 싶습니다 : 나는 "뒤에"실행하는 microservice을 죽일스프링 클라우드의 Zuul 서버의 폴백 메소드

를 API 게이트웨이는 그때에 hystrix 강제 회로를 엽니 다. 그 후 (약 10 초) 비 실행 마이크로 서비스에 요청을 보내고 TIMEOUT 오류를 수신합니다. 그러나 매우 짧은 시간 (최대 1 초) 내에 많은 (수십 개의) 요청을 보내면 바로 가기 오류가 발생합니다.
회로가 열려 있어도 TIMEOUT 오류가 발생하는 이유는 놀랍기 때문에 hystrix는 이러한 종류의 오류를 방지하기 위해 실행되어야합니다. 하지만 이유는 그 이유는 마지막 요청> circuitBreaker.sleepWindowInMilliseconds 이후 API 게이트웨이가 살아 있는지를 확인하기 위해 다시 마이크로 서비 스에 연결하려고 시도하지만 그렇게되지 않았기 때문입니다. -> TIMEOUT. 그것은 또한 짧은 시간에 많은 요청에 대해 SHORTCIRCUIT OPEN 오류가 발생하는 이유를 설명합니다.

HystrixRuntimeException: Microservice (timed-out | short-circuited) and no fallback available 

어떻게 zuul 서버에서 대체 (모든 경로에 대해 동일 할 수 있음)로 지정할 수 있습니다

다음 일은 내가 "시간 초과"또는 내가 가진 "단락"오류가 발생 같은 것입니다 이 예외를 피하시겠습니까?
내가 지금까지 시도하는 것 :

  • this에 따르면 내가 타임 아웃을 피하기 위해 을 스레드 실행 고립 전략을 설정하려면 :

    hystrix : command.default.execution.isolation.strategy : THREAD

하지만 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 최신 버전은 Zuul 수준에서 대체를 지원

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 

답변

1

. ZuulFallbackProvider를 확장하면됩니다. 예는 아래의 링크를 참조하시기 바랍니다 : (당신은 URL 기반의 설정이있는 경우 등을 위해) 자신을 트리거링 대체가 경로 구성의 특정 유형의 수행하지

https://github.com/spring-cloud-samples/zuul-server/blob/master/src/main/java/zuulserver/ZuulServerApplication.java

"이 간단한 URL-루트 돈을 HystrixCommand로 실행되지 않으며 여러 URL을 리본으로로드 밸런싱 할 수 없습니다. "

+0

문제를 해결하는 올바른 버전/버전으로 사용자를 안내하기 위해 버전 번호를 입력하는 것을 고려해야합니다. – scicalculator

+0

공식 스프링 문서에서 내가 얼마나 많은 것을 놓쳤는 지 놀라워합니다.실패한 URL 경로에 대해 내 대체 수단이 호출되지 않는 이유를 알 수 없습니다. +1 – Bal