2017-03-08 3 views
0

Microservice-Project에서 Zuul 프록시와 이상한 동작이 발생했습니다. 내 설치 프로그램은 Discovery-Service (Eureka), API-Gateway (Zuul) 및 두 개의 Microservices "A"& "B"로 구성됩니다. 설치를 시작하면, 다음과 같은 경로를 통해 표시됩니다 "로컬 호스트 : 10000/경로"Zuul이 REST 호출 후 경로를 다시 작성하는 것으로 보입니다

{ 
    "/api-gateway/**": "api-gateway", 
    "/a-service/**": "a-service", 
    "/b-service/**": "b-service" 
} 

내 Zuul 구성은 다음과 같습니다

zuul: 
    ignored-services: '' 
    add-proxy-headers: true 
    sensitiveHeaders: 'Cookie,Set-Cookie' 

가 지금은 게이트웨이를 통해 서비스에 액세스하고 수 있도록 일부 REST 호출 :

http://localhost:10000/a-service/sayHello -> 확인

http://localhost:10000/b-service/sayBye -> 확인

http://localhost:10000/a-service/sayHello -> ERROR 404

나는 내가 "/ A-서비스/**"경로를 사용하고, 비록 마지막 요청이 잘못 서비스 B로 전달되는 것을 볼 수 있습니다. 어떻게 될 수 있습니까? 서비스 B에 대한 두 번째 REST 호출이 어떻게 든 라우팅을 다시 작성 했습니까?

그러나 "localhost : 10000/routes"는 여전히 위와 동일합니다. https://github.com/Netflix/zuul/files/827817/MinimalZuulRouteBugProject.zip

: 당신은 쉽게 여기에이 동작을 복제 할 수 있도록해야 4 개 구성 요소와 최소한의 프로젝트를 다운로드 할 수 있습니다 서비스 A.

로 라우팅 실수> (404)를 - 이것은 또한 반대 순서 BAB에서 서비스를 호출 작동

이 문제와 관련하여 의견을 보내 주셔서 감사합니다. spencergibb의 @github에서

답변

0

답변 :

이것을 FooConfiguration가있다 http://cloud.spring.io/spring-cloud-static/Camden.SR5/#_customizing_the_ribbon_client

는 @Configuration 수 있지만, 메인 응용 프로그램에 대한 @ComponentScan에없는 것을 돌봐 여기에 문서화 된 문제입니다 컨텍스트이면 이 모든 @RibbonClients에서 공유됩니다. @ComponentScan (또는 @SpringBootApplication)을 사용하는 경우 이 포함되지 않도록 조치해야합니다 (예 : 중복되지 않는 별도의 패키지 에 넣거나 @ComponentScan에서 명시 적으로 스캔 할 패키지를 지정).

귀하의 경우 구성 요소 스캔에 의해 리본 구성 사용이 선택되어 모든 리본 클라이언트간에 공유됩니다 (불량). @Configuration을 제거하거나 (이렇게 주석을 달지 않아도됩니다. 테스트 한 방법입니다) 또는 구성 요소 검색에서 제외하십시오.

잘못된 코드 :

@Configuration //THIS ANNOTATION IS THE ERROR  
public class RibbonConfigAvailability { 

    @Bean 
    public IRule ribbonRule() { 
     return new AvailabilityFilteringRule(); 
    } 

}