작성
·
529
0
- spring-boot: v2.5.2
- cloud: 2020.0.3
예제처럼 따라했는데, user-service -> order-service로의 접근시에는 gateway를 통하지 않고 바로 통신합니다.
유레카에서 해당 서비스 IP/PORT 아이피를 바로 얻어갑니다
아래는 /user 조회시 주문 정보까지 가져올 때 gateway 로그입니니다.
/user호출
|- 해당 호출에서 rest로 /order 호출
이면 gateway에서 /order 로깅이 되어야 하는데 출력이 되지 않네요.
2021-07-14 12:10:01.325 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global filter: baseMessage: Spring Cloud Gateway Global Filter
2021-07-14 12:10:01.327 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global Filter Start: request id -> 96706a17-38
2021-07-14 12:10:01.328 INFO 48697 --- [ctor-http-nio-3] c.s.c.filter.AuthorizationHeaderFilter : Authorization> authorizationHeader: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJjYzg5N2Q3ZmQ3OTU0NjFiYmVjYjFhNjE1YTE5ZjU1OSIsImV4cCI6MTYyNjIzMzI4MH0.RIMPVoIUb8UNsrTOC4UTfmG3VXF-NdwqUlzTsNIxqjr2Fp0A50DGcmBQc6qwZ6Ucwi8-kraU9FuYCgMM_nIM2Q
2021-07-14 12:10:01.331 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging filter: baseMessage: Inner Logging Filter
2021-07-14 12:10:01.332 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging PRE Filter: request uri -> http://localhost:8080/users/cc897d7fd795461bbecb1a615a19f559
2021-07-14 12:10:01.461 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging POST Filter: response code -> 200 OK
2021-07-14 12:10:01.461 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global Filter End: response code -> 200 OK
2021-07-14 12:14:07.516 INFO 48697 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
그래서 예제처럼 @Loadbalanced를 쓰려면 uri에서 "/order-service"를 제거해야만 나옵니다.
먼가 설정을 빠뜨린 것 같은데 잘 모르곘네요
답변 2
1
안녕하세요, 이도원입니다.
다음과 같이 사용자의 상세 정보를 요청하게 되면,
http://ip_address:8000/user-service/users/[user_id]
ex)
해당 사용자가 주문한 주문 내역이 같이 보여지게 됩니다. 이때 RestTempalte에서는 order-service에 요청하기 위해서 user-service.yml 파일로 부터 다음과 같은 주소를 사용하고 있습니다.
위에서 보시는 것처럼, EUREKA에 등록된 ORDER-SERVICE라는 애플리케이션명을 통해 직접 order service에 접속하고 있기 때문에, apigateway-service를 거치지 않고 바로 요청하게 됩니다. 만약 위 정보를 아래와 같이 apigateway를 거쳐서 접속하도록 수정한다면 apigateway-service에 해당 로그가 출력되는 것을 보실 수 있을겁니다.
위 로그는 apigateway-service에 대한 내용인데, 첫번째 request id -> c5045b2f-53는 user-service에 대한 요청이고, 두번째 request id -> 3925e9cb-1는 user-service에서 order-service를 요청한 내용입니다.
추가로, 위와 같이 Eureka의 ORDER_SERVICE라는 애플리케이션명 대신 직접 ip address를 지정해서 사용하실 경우에는 user-service에서 RestTemplate 빈을 등록하실 때 @LoadBalanced 어노테이션을 넣지 말고 실행하시기 바랍니다.
@Bean
// @LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
감사합니다.
0
- spring-boot: v2.5.2
- cloud: 2020.0.3
예제처럼 따라했는데, user-service -> order-service로의 접근시에는 gateway를 통하지 않고 바로 통신합니다.
유레카에서 해당 서비스 IP/PORT 아이피를 바로 얻어갑니다
아래는 /user 조회시 주문 정보까지 가져올 때 gateway 로그입니니다.
/user호출
|- 해당 호출에서 rest로 /order 호출
이면 gateway에서 /order 로깅이 되어야 하는데 출력이 되지 않네요.
2021-07-14 12:10:01.325 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global filter: baseMessage: Spring Cloud Gateway Global Filter
2021-07-14 12:10:01.327 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global Filter Start: request id -> 96706a17-38
2021-07-14 12:10:01.328 INFO 48697 --- [ctor-http-nio-3] c.s.c.filter.AuthorizationHeaderFilter : Authorization> authorizationHeader: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJjYzg5N2Q3ZmQ3OTU0NjFiYmVjYjFhNjE1YTE5ZjU1OSIsImV4cCI6MTYyNjIzMzI4MH0.RIMPVoIUb8UNsrTOC4UTfmG3VXF-NdwqUlzTsNIxqjr2Fp0A50DGcmBQc6qwZ6Ucwi8-kraU9FuYCgMM_nIM2Q
2021-07-14 12:10:01.331 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging filter: baseMessage: Inner Logging Filter
2021-07-14 12:10:01.332 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging PRE Filter: request uri -> http://localhost:8080/users/cc897d7fd795461bbecb1a615a19f559
2021-07-14 12:10:01.461 INFO 48697 --- [ctor-http-nio-3] c.socurites.cloud.filter.LoggingFilter : Logging POST Filter: response code -> 200 OK
2021-07-14 12:10:01.461 INFO 48697 --- [ctor-http-nio-3] com.socurites.cloud.filter.GlobalFilter : Global Filter End: response code -> 200 OK
2021-07-14 12:14:07.516 INFO 48697 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
그래서 예제처럼 @Loadbalanced를 쓰려면 uri에서 "/order-service"를 제거해야만 나옵니다.
먼가 설정을 빠뜨린 것 같은데 잘 모르곘네요
안녕하세요, 이도원입니다.
다음과 같이 사용자의 상세 정보를 요청하게 되면,
http://ip_address:8000/user-service/users/[user_id]
ex)
해당 사용자가 주문한 주문 내역이 같이 보여지게 됩니다. 이때 RestTempalte에서는 order-service에 요청하기 위해서 user-service.yml 파일로 부터 다음과 같은 주소를 사용하고 있습니다.
위에서 보시는 것처럼, EUREKA에 등록된 ORDER-SERVICE라는 애플리케이션명을 통해 직접 order service에 접속하고 있기 때문에, apigateway-service를 거치지 않고 바로 요청하게 됩니다. 만약 위 정보를 아래와 같이 apigateway를 거쳐서 접속하도록 수정한다면 apigateway-service에 해당 로그가 출력되는 것을 보실 수 있을겁니다.
위 로그는 apigateway-service에 대한 내용인데, 첫번째 request id -> c5045b2f-53는 user-service에 대한 요청이고, 두번째 request id -> 3925e9cb-1는 user-service에서 order-service를 요청한 내용입니다.
추가로, 위와 같이 Eureka의 ORDER_SERVICE라는 애플리케이션명 대신 직접 ip address를 지정해서 사용하실 경우에는 user-service에서 RestTemplate 빈을 등록하실 때 @LoadBalanced 어노테이션을 넣지 말고 실행하시기 바랍니다.