이전 게시물의 apigateway-service의 application.yml 파일에서 등록한 라우트 정보를 주석하여
자바코드로 설정정보를 처리해보자.
application.yml 주석처리
server:
port: 8000
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
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/**
config 패키지 생성 및 해당 패키지에 FilterConfig.java 파일 생성
FilterConfig.java 에 application.yml에 주석처리했던 라우팅 정보 설정
package com.example.apigatewayservice.config;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@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"))
.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"))
.build();
}
}
first-service, second-service 프로젝트에 새로운 테스트용 api 메소드 추가
filters에 추가한 요청, 응답 헤더 정보를 확인할 수 있는 API
FirstServiceController.java
package com.example.firstservice;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// http://localhost:8081/welcome
// http://localhost:8081/first-service/welcome
@RestController
@RequestMapping("/first-service")
@Slf4j
public class FirstServiceController {
@GetMapping("/welcome")
public String welcome() {
return "Welcome to the First Service";
}
@GetMapping("/message")
public String message(@RequestHeader("first-request") String header) {
log.info(header);
return "Hello World in First Service.";
}
}
SecondServiceController.java
package com.example.secondservice;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// http://localhost:8082/welcome
// http://localhost:8082/second-service/welcome
@RestController
@RequestMapping("/second-service")
@Slf4j
public class SecondServiceController {
@GetMapping("/welcome")
public String welcome() {
return "Welcome to the Second Service";
}
@GetMapping("/message")
public String message(@RequestHeader("second-request") String header) {
log.info(header);
return "Hello World in Second Service.";
}
}
처리 결과
http://localhost:8000/first-service/message
filter에 설정했던 first-reqeust-header가 출력되고 있다.
response-header 정보도 개발자 도구로 확인 가능하다!
하지만
application.yml에서도 filters에 설정한 요청, 응답 헤더정보를 추가할 수 있다.
우선 @Configuration, @Bean을 주석처리하여 application.yml에 설정해보자.
FilterConfig.java 어노테이션 주석처리
package com.example.apigatewayservice.config;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//@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"))
.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"))
.build();
}
}
application.yml 주석 해제 및 filters 응답, 요청 헤더 정보 설정
server:
port: 8000
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: apigateway-service
cloud:
gateway:
routes:
- id: first-service
uri: http://localhost:8081/
predicates:
- Path=/first-service/**
filters:
- AddRequestHeader=first-request, first-request-header2
- AddResponseHeader=first-response, first-response-header2
- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
filters:
- AddRequestHeader=second-request, second-request-header2
- AddResponseHeader=second-response, second-response-header2
서버 재실행 후 확인
http://localhost:8000/first-service/message
동일하게 작동되는 것을 확인할 수 있습니다.
SpringBoot MSA (8) - Spring Cloud Gateway 와 Eureka 연동 (0) | 2023.10.10 |
---|---|
SpringBoot MSA (7) - API Gateway Service Filter (2) (0) | 2023.10.10 |
SpringBoot MSA (5) - API Gateway Service (0) | 2023.10.03 |
SpringBoot MSA (4) - UserService / Load Balancer (0) | 2023.10.03 |
SpringBoot MSA (3) - Service Discovery에 UserService 등록하기 (0) | 2023.10.03 |
댓글 영역