https://twofootdog.tistory.com/64
gateway에서 각각 서비스들을 호출하게 될건데 지금은 local에서 진행할거기도 하고 차이를 위해서 ae_Springserver는 포트번호를 8081로 ae_communityServer는 포트번호를 8082 로 진행한다.
Gateway는 2개의 마이크로서비스(ae_Springserver, ae_communityServer )를 라우팅 할 것이다.
server:
port: 8080
spring:
application:
name: ae_GatewayServer
cloud:
gateway:
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway GlobalFilter
preLogger: true
postLogger: true
routes:
- id: ae_SpringServer
uri: http://localhost:8081/
predicates:
- Path=/chaebbi/**
filters:
- name: ae_SpringFilter
args:
baseMessage: Spring Cloud Gateway ae_SpringServerFilter
preLogger: true
postLogger: true
- id: ae_communityServer
uri: http://localhost:8082/
predicates:
- Path=/community/**
filters:
- name: ae_communityFilter
args:
baseMessage: Spring Cloud Gateway ae_communityServerFilter
preLogger: true
postLogger: true
설명 :
그리고 eureka 페이지에서 등록된 gateway 인스턴스 확인
1 ae_SpringServer
2 ae_CommunityServer
앞에서 GlobalFilter, ae_SpringFilter , ae_communityFilter를 호출하도록 선언해뒀으므로 각 Filter를 구현 (구성 똑같음. 필터를 거쳐서 가는거 확인 가능함)
package com.ae.gateway;
import lombok.Data;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
@Component
public class GlobalFilter extends AbstractGatewayFilterFactory<GlobalFilter.Config> {
private static final Logger logger = LogManager.getLogger(GlobalFilter.class);
public GlobalFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
return ((exchange, chain) -> {
logger.info("GlobalFilter baseMessage>>>>>>" + config.getBaseMessage());
if (config.isPreLogger()) {
logger.info("GlobalFilter Start>>>>>>" + exchange.getRequest());
}
return chain.filter(exchange).then(Mono.fromRunnable(()->{
if (config.isPostLogger()) {
logger.info("GlobalFilter End>>>>>>" + exchange.getResponse());
}
}));
});
}
@Data
public static class Config {
private String baseMessage;
private boolean preLogger;
private boolean postLogger;
}
}
ae_SpringFilter
package com.ae.gateway;
import lombok.Data;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
@Component
public class ae_SpringFilter extends AbstractGatewayFilterFactory<ae_SpringFilter.Config> {
private static final Logger logger = LogManager.getLogger(ae_SpringFilter.class);
public ae_SpringFilter() {
super(ae_SpringFilter.Config.class);
}
@Override
public GatewayFilter apply(ae_SpringFilter.Config config) {
return ((exchange, chain) -> {
logger.info("ae_SpringFilter baseMessage>>>>>>" + config.getBaseMessage());
if (config.isPreLogger()) {
logger.info("ae_SpringFilter Start>>>>>>" + exchange.getRequest());
}
return chain.filter(exchange).then(Mono.fromRunnable(()->{
if (config.isPostLogger()) {
logger.info("ae_SpringFilter End>>>>>>" + exchange.getResponse());
}
}));
});
}
@Data
public static class Config {
private String baseMessage;
private boolean preLogger;
private boolean postLogger;
}
}
ae_communityFilter
package com.ae.gateway;
import lombok.Data;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
@Component
public class ae_communityFilter extends AbstractGatewayFilterFactory<ae_communityFilter.Config> {
private static final Logger logger = LogManager.getLogger(ae_communityFilter.class);
public ae_communityFilter() {
super(ae_communityFilter.Config.class);
}
@Override
public GatewayFilter apply(ae_communityFilter.Config config) {
return ((exchange, chain) -> {
logger.info("ae_communityFilter baseMessage>>>>>>" + config.getBaseMessage());
if (config.isPreLogger()) {
logger.info("ae_communityFilter Start>>>>>>" + exchange.getRequest());
}
return chain.filter(exchange).then(Mono.fromRunnable(()->{
if (config.isPostLogger()) {
logger.info("ae_communityFilter End>>>>>>" + exchange.getResponse());
}
}));
});
}
@Data
public static class Config {
private String baseMessage;
private boolean preLogger;
private boolean postLogger;
}
}
ae_SpringServer
Community 도 잘됨