728x90
반응형
route 룰에 meta data를 넣을 수 있다. yml 파일의 경우 아래와 같은 방법으로 하면 된다.
spring:
cloud:
gateway:
routes:
- id: route_with_metadata
uri: https://example.org
metadata:
optionName: "OptionValue"
compositeObject:
name: "value"
iAmNumber: 1
Java 로 할 경우에는 다음과 같이 한다.
import static org.springframework.cloud.gateway.support.RouteMetadataUtils.CONNECT_TIMEOUT_ATTR;
import static org.springframework.cloud.gateway.support.RouteMetadataUtils.RESPONSE_TIMEOUT_ATTR;
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeBuilder){
return routeBuilder.routes()
.route("test1", r -> {
return r.host("*.somehost.org").and().path("/somepath")
.filters(f -> f.addRequestHeader("header1", "header-value-1"))
.uri("http://someuri")
.metadata(RESPONSE_TIMEOUT_ATTR, 200)
.metadata(CONNECT_TIMEOUT_ATTR, 200);
})
.build();
}
셋팅 된 meta data를 가지고 올 경우에는 다음 처럼 사용할 수 있다.
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
log.info("##################### custom global filter #####################");
Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
route.getMetadata();
// route.getMetadata("someKey");
return chain.filter(exchange);
}
매뉴얼 상 route.getMetadata(somkey)로 특정 meta data를 가져올 수 있다고 하는데 실제 문법 오류가 나고 있으며 org.springframework.cloud.gateway.route.Route.java 파일을 열어봐도 private final Map<String, Object> metadata; 의 맵 정보 중 특정 키로 값을 가져오는 방법은 안보인다.
728x90
반응형
'Architecture > MSA' 카테고리의 다른 글
Spring Cloud Gateway - CORS Configuration (0) | 2021.01.07 |
---|---|
Spring Cloud Gateway - Http timeouts configuration (0) | 2021.01.07 |
Spring Cloud Gateway - Configuration (0) | 2021.01.07 |
Spring Cloud Gateway - HttpHeadersFilters (0) | 2021.01.07 |
Spring Cloud Gateway - Custom Predicate with AbstractRoutePredicateFactory (0) | 2021.01.06 |