首页 > 解决方案 > 基于自定义请求标头值,我们可以设置 spring-cloud-gateway 路径,如果有任何示例,请告知

问题描述

我正在尝试使用 Spring Cloud Gateway 进行小型概念验证。我有 5 个微服务要调用。从前端 ui 我正在尝试调用我使用 java config 配置的 spring-cloud-gateway 服务。这一切都适用于简单的情况,但是我计划根据自定义标题字段动态设置路径:例如:如果 Journey-type=train 然后 predicate.path 需要设置 train-service 并且如果 Journey-type=car 然后 predicate.path 需要设置 car-service 。是否可以动态设置。

我们可以在这里实现哪些模式,是全局过滤器更好还是网关过滤器。 @Configuration public class BeanConfig {

 @Bean
    public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r
                        .path("/abc/v1.0/train/**")
                        .filters(f->f.filter(new TrainFilter()))
                        .uri("http://localhost:8082/")
                        .id("addressModule"))

                .route(r -> r.path("/abc/v1.0/car/**")
                        .uri("http://localhost:8083/")
                        .id("consumerModule"))
                .build();
    }

} Filter code @Slf4j public class TrainFilter implements GatewayFilter {

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    log.info("BEFORE in SimpleFilter.....called");
     HttpHeaders headers = exchange.getRequest().getHeaders();
     List<String>  journeyKey = headers.get("JOURNEY-TYPE"); 
     System.out.println(journeyKey);
     if(!journeyKey.isEmpty() && journeyKey.get(0).equals("CAR")) {
         System.out.println("its train..journey type ");
                return chain.filter(exchange);
        }
     
     else {
    
         org.springframework.http.server.reactive.ServerHttpResponse serverHttpResponse =exchange.getResponse();
        serverHttpResponse.setStatusCode(HttpStatus.OK);
        byte[] response = "{\"status\":error\",\"message\":\"error occured\"}".getBytes(StandardCharsets.UTF_8);
        org.springframework.core.io.buffer.DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(response);
        return exchange.getResponse().writeWith(Flux.just(buffer));
        
    }
    

}

不确定..最好的方法是什么,请建议..根据标题字段值我们可以动态设置路径吗?比如抽象级别,在此先感谢您对此进行调查

标签: spring-cloud-gateway

解决方案


推荐阅读