Шлюз Springboot поддерживает метаданные с маршрутом с помощью RouteDefinitionLocator

#spring-boot #spring-cloud-gateway

Вопрос:

Я реализовал RouteDefinitionLocator для создания определения маршрута нескольких служб.

У меня есть два URL-адреса, для которых я хочу получить информацию о маршруте (это всего лишь пример URL-адреса, у меня около 400 URL-адресов).

 1. POST /v1/products
2. PUT /v1/products/{id} 
 

У меня есть переопределение getRouteDefinitions (), как показано ниже

 public class CustomRouteDefinitionLocator implements RouteDefinitionLocator {

  @Override
  public Flux<RouteDefinition> getRouteDefinitions() {
    RouteDefinition routeDefinition = new RouteDefinition();
    routeDefinition.setUri(URI.create("http://localhost:8081"));

    PredicateDefinition predicate = new PredicateDefinition();
    predicate.setName(normalizeRoutePredicateName(PathRoutePredicateFactory.class));
    predicate.addArg(PATTERN_KEY, "/v1/products/**");
    routeDefinition.getPredicates().add(predicate);

    FilterDefinition filter = new FilterDefinition();
    filter.setName("CustomFilter");
    routeDefinition.getFilters().add(filter);

    Flux.just(routeDefinition);
  }
}
 

Фильтр

 public class CustomFilter extends AbstractGatewayFilterFactory{

  @Override
  public GatewayFilter apply(Object config) {
    return new OrderedGatewayFilter((exchange, chain) -> {
      // Try to get Route path which selected by Gateway
      ServerHttpRequest request = exchange.getRequest();
      //business logic
      ServerWebExchange build = exchange.mutate().build();
      return chain.filter(build);
    }, 129);
  }
}
 

Теперь, если я попрошу что-то вроде http://localhost:8080/v1/products

затем в фильтре(CustomFilter) Я хочу знать, какой маршрут выбран для вызова внутреннего сервера.

Потому что на основе выбранного маршрута я хочу передать некоторую информацию на внутренний сервер.

Может кто-нибудь, пожалуйста, помочь мне решить эту проблему?

Спасибо, Алпеш