작성
·
19
·
수정됨
0
server:
port: 8000
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: apiGateway-service
cloud:
gateway:
server:
webflux:
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway WebFlux Global Filter
preLogger: true
postLogger: true
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user-service/**
- id: first-service
uri: lb://MY-FIRST-SERVICE
predicates:
- Path=/first-service/**
filters:
- AddRequestHeader=f-request, 1st-request-header-by-yaml
- AddResponseHeader=f-response, 1st-response-header-from-yaml
- name: LoggingFilter
args:
baseMessage: Spring Cloud Gateway WebFlux Logging Filter
preLogger: true
postLogger: true
다음처럼 apigateway의 설정파일을 작성하였습니다. 하지만 두 필터가 모두 동작하지 않습니다. 필터 클래스 모두 강의와 동일하게 작성하였고, first-service와 apigateway-service 모두 유레카 서버에 잘 등록되며, api 게이트웨이 또한 동작을 정상적으로 합니다. 혹시 어느 부분에서 잘못되었는 지 알 수 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
백재원님, 먼저 설정 파일을 확인할 때, WebFlux 설정이 제대로 적용되고 있는지 확인하셔야 합니다. Spring Cloud Gateway는 WebFlux 기반에서 작동하므로 Spring WebFlux가 프로젝트에 포함되어 있어야 합니다. Spring WebFlux가 포함되지 않으면 GlobalFilter와 같은 WebFlux 관련 설정이 작동하지 않습니다. spring-boot-starter-webflux
의존성이 build.gradle
이나 pom.xml
에 추가되어 있는지 확인해 보세요.
또한, 설정 파일에서 default-filters
리스트가 server.webflux
하위에 위치하고 있는 부분이 잘못되었습니다. spring.cloud.gateway
하위로 변경하여 다음과 같이 수정해 보세요:
spring:
cloud:
gateway:
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway WebFlux Global Filter
preLogger: true
postLogger: true
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user-service/**
- id: first-service
uri: lb://MY-FIRST-SERVICE
predicates:
- Path=/first-service/**
filters:
- AddRequestHeader=f-request, 1st-request-header-by-yaml
- AddResponseHeader=f-response, 1st-response-header-from-yaml
- name: LoggingFilter
args:
baseMessage: Spring Cloud Gateway WebFlux Logging Filter
preLogger: true
postLogger: true
마지막으로, 작성한 필터 클래스들이 Spring 애플리케이션 컨텍스트에 빈으로 등록되어 있는지도 확인하시길 바랍니다. 필터 클래스에 @Component
어노테이션이나 적절한 빈 등록 코드가 있는지 체크해 주세요. 추가적으로 Spring Boot Reference Documentation에 언급된 내용을 살펴보시면 도움이 될 수 있습니다.