반응형
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Spring Cloud Gateway - Filter 적용(Java 소스)
자바 코드로 필터 설정을 하기 위해 application.yml에 설정했던 route 관련 설정을 주석처리한다.
spring:
application:
name: apigateway-service
# cloud:
# gateway:
# routes:
# - id: first-service
# uri: http://localhost:8081/
# predicates:
# - Path=/first-service/**
# - id: second-service
# uri: http://localhost:8082/
# predicates:
# - Path=/second-service/**
FilterConfig.java 생성
람다식과 코드 체이닝 방식을 통해 코드를 작성한다.
@Configuration
public class FilterConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/first-service/**")
.filters(f -> f.addRequestHeader("first-request", "first-request-header")
.addResponseHeader("first-response", "first-response-header"))
.uri("http://localhost:8081"))
.build();
}
}
path로 들어온 주소를 uri의 값 주소로 보내준다.
filters의 addRequestHeader는 Request(요청) 헤더에 추가 할 데이터를 키와 값 쌍으로 넣어주고, addResponseHeader는 Response(응답) 헤더에 추가할 데이터를 키와 값 쌍으로 넣어준다.
second-service도 작성해주자.
.route(r -> r.path("/second-service/**")
.filters(f -> f.addRequestHeader("second-request", "second-request-header")
.addResponseHeader("second-response", "second-response-header"))
.uri("http://localhost:8082"))
first-service Controller 메서드 추가
@GetMapping("/message")
public String message(@RequestHeader("first-request") String header) {
log.info(header);
return "Hello World in First Service";
}
log는 Lombok을 사용하여 클래스 블록에 @Slf4j를 선언했다.
second-service Controller 메서드 추가
@GetMapping("/message")
public String message(@RequestHeader("second-request") String header) {
log.info(header);
return "Hello World in Second Service";
}
세 개의 프로젝트 모두 서버를 재실행하고 크롬에서 확인한다.
또, 콘솔을 확인하면 로그로 찍은 값이 보이는 것도 확인한다.
개발자 도구 network 탭에서 response 메세지도 확인한다.
Spring Cloud Gateway - Filter 적용(property)
FilterConfig.java 주석 처리
Configuration, Bean 어노테이션만 주석처리 하면 자바로 설정했던 내용이 적용되지 않는다.
//@Configuration
public class FilterConfig {
//@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
application.yml
cloud:
gateway:
routes:
- id: first-service
uri: http://localhost:8081/
predicates:
- Path=/first-service/**
- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
위 파일에 predicates와 같은 레벨로 filter 정보를 추가한다.
//... 생략
filters:
- AddRequestHeader=first-request, first-request-header2
- AddResponseHeader=first-response, first-response-header2
//...생략
filters:
- AddRequestHeader=second-request, second-request-header2
- AddResponseHeader=second-response, second-response-header2
서버를 재실행한다.
이번에는 포스트맨에서 확인하자.
Header 탭을 클릭해 추가한 filter가 적용되었는지 확인하자.
- 출처 : 인프런 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의
반응형