Динамическое проксирование с помощью Zuul

Я пытаюсь проксировать с помощью Zuul на основе некоторой информации о файлах cookie. Я предполагаю, что мне придется написать несколько фильтров, которые будут обеспечивать динамическую фильтрацию. Предположительно, что-то вроде описания в этой теме:

Первая проблема заключается в том, что я не могу заставить свой базовый тест работать. Я посмотрел на фильтр PreDecorationFilter и попытался смоделировать часть пересылки. В результате получился следующий базовый фильтр:

     @Bean
 public ZuulFilter myFilter() {
     return new ZuulFilter(){
                private UrlPathHelper urlPathHelper = new UrlPathHelper();

                 @Override
                 public Object run() {
                         RequestContext ctx = RequestContext.getCurrentContext();
                         final String requestURI = this.urlPathHelper.getPathWithinApplication(ctx.getRequest());
                         ctx.put("requestURI", requestURI);
                         ctx.set("forward.to", "localhost:8983");
                         ctx.setRouteHost(null);
                         return null;
                 }

                 @Override
                 public boolean shouldFilter() {
                         return true;
                 }

                 @Override
                 public int filterOrder() {
                         return 10;
                 }

                 @Override
                 public String filterType() {
                         return "pre";
                 }};
 }

Моя проблема в том, что это не работает. Когда я запускаю Zuul из браузера, фильтр вызывается, но переадресация на самом деле не происходит. Я получаю ответ с длиной содержимого 0.

Какие кусочки головоломки мне не хватает?

РЕДАКТИРОВАТЬ: добавление моего содержимого application.yml:

info:
    component: Zuul Server

endpoints:
    restart:
        enabled: true
    shutdown:
       enabled: true
    health:
       sensitive: false

server:
   port: 8080

zuul:
   proxy:
      addProxyHeaders: true
   routes:
      dynamic:
          path: /dynamic/**
          url: http://route-to-nowhere.com

person Klaus    schedule 13.03.2016    source источник
comment
Какова ваша конфигурация маршрутизации?   -  person spencergibb    schedule 13.03.2016
comment
Добавил свой конфиг. route-to-nowhere.com не существует, так как я не ожидаю маршрутизации туда. Я ожидаю, что реальный пункт назначения будет предоставлен динамически.   -  person Klaus    schedule 13.03.2016


Ответы (1)


Думаю, я нашел ответ. Я должен установить routeHost вместо URI и forward.to. Следующий код работает для меня. Он игнорирует запись в application.yml и маршрут к хосту, который я указываю динамически.

@Bean
 public ZuulFilter myFilter() {
     return new ZuulFilter(){
                 @Override
                 public Object run() {
                         RequestContext ctx = RequestContext.getCurrentContext();
                         try {
                            ctx.setRouteHost(new URL("http://localhost:8983"));
                        } catch (MalformedURLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                         return null;
                 }

                 @Override
                 public boolean shouldFilter() {
                         return true;
                 }

                 @Override
                 public int filterOrder() {
                         return 10;
                 }

                 @Override
                 public String filterType() {
                         return "pre";
                 }};
 }
person Klaus    schedule 13.03.2016