공부/Spring

Spring Cloud로 개발하는 마이크로서비스 애플리케이션_API Gateway Service_4

데부한 2023. 2. 16. 23:26
반응형

 

 

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) 강의

 

반응형