Как получить имя хоста сервера, на который будет перенаправлен запрос в zuul / tape - PullRequest
0 голосов
/ 24 мая 2018

В настоящее время я использую Zuul и Ribbon в качестве обратного прокси-сервера и балансировщика нагрузки соответственно.Я также использую Eureka в качестве службы поиска.У меня есть несколько экземпляров службы в Eureka, и я хочу знать имя хоста сервера, выбранного Ribbon.

Это моя текущая конфигурация:

GatewayApplication.java:

@EnableZuulProxy
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {
  static RequestQueue q = new RequestQueue();

  public static void main(String[] args) {
    q.start();
    SpringApplication.run(GatewayApplication.class, args);
  }

  @Bean
  public LogIncomingRequest logIncomingRequest() {
    return new LogIncomingRequest(q);
  }

  @Bean
  public LogLeavingRequest logLeavingRequest() {
    return new LogLeavingRequest(q);
  }
}

application.yml:

server:
  port: 4000

spring:
  application:
    name: zuul-gateway

zuul:
  sensitive-headers:

eureka:
  client:
    serviceUrl:
      defaultZone: http://${EUREKA:10.0.2.15:8761}/eureka/
    register-with-eureka: true
    fetch-registry: true
  instance:
    prefer-ip-address: true

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 60000

У меня также есть пред ипост-фильтр.Как я могу получить информацию о сервере, который был выбран на ленте?

Я нашел этот код, но понятия не имею, где его использовать и как получить доступ к информации.

@Component
public class RibbonInterceptor extends ZoneAvoidanceRule {

@Override
public Server choose(Object key) {
  Server choose = super.choose(key);
  System.out.println(choose);
  return choose;
}

Есть ли другие решения?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Мне только что удалось найти решение моей проблемы.Я создал POST-фильтр и получил нужную информацию, используя этот код:

RequestContext ctx = RequestContext.getCurrentContext();
((IResponse) ctx.get("ribbonResponse")).getRequestedURI();
0 голосов
/ 25 мая 2018

Внедрите фильтр «pre» в свой шлюз zuul api. Если вы посмотрите на PreDecorationFilter zuul, вы увидите, что он определяет, куда и как маршрутизировать, основываясь на предоставленном.Также устанавливает различные связанные с прокси заголовки для последующих запросов

в ваших методах запуска фильтров

context = RequestContext.getCurrentContext();    
request = context.getRequest();

, вызывая метод getRouteHost для объекта контекста, он предоставит вам всю информацию, связанную с маршрутом, такую ​​как протокол, хост,порт и т. д.

RequestContext.getCurrentContext().getRouteHost();

ПРИМЕЧАНИЕ. Порядок фильтра должен быть> 5, поскольку preDecorationFilter имеет порядок 5

@Override
    public int filterOrder() {
        return PRE_DECORATION_FILTER_ORDER;
    }
...