Маршрут Zuul не отображается должным образом с помощью ленты listOfServers (без Eureka) - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь настроить ленточку для моих маршрутов zuul, поэтому, когда я иду на http://host1:port1/restful-service/app1, он должен направить меня на http://host2:port2/rest-example/app1. Он работает правильно, когда я определяю маршрут с помощью свойства "url" без использования ленты:

zuul:
  routes:
      restful-service:
          path: /restful-service/**
          url: http://host2:port2/rest-example

Но когда я пытаюсь использовать ленту, которая выглядит так:

zuul:
  routes:
    restful-service:
      path: /restful-service/**
      serviceId: restful-service

ribbon:
  eureka:
    enabled: false

restful-service:
  ribbon:
    listOfServers: host2:port2/rest-example

Позволяет только маршрутизировать на http://host2:port2/rest-example, но не на выбранную услугу напрямую http://host2:port2/rest-example/app1 (возвращается код состояния 404).

Ответы [ 2 ]

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

Измените ваши параметры конфигурации следующим образом -

    zuul:
        routes:
              restful-service:
                       serviceId:restful-service
                       stripPrefix:false

   ribbon:
        eureka:
             enabled:false

   restful-service:
        ribbon:
            listOfServers: host2:port2

Затем вам нужно будет написать предварительный фильтр zuul, чтобы изменить запрос URI

      public class CustomPreFilter extends ZuulFilter {

      public Object run() {

       RequestContext context=RequestContext.getCurrentContext();
       String oldrequestURI=(String) context.get("requestURI");
       String newrequestURI=oldrequestURI.replace("restful-service", "rest-example");
       context.put("requestURI",newrequestURI);
       return null;
     }

      public boolean shouldFilter() {

       HttpServletRequest httpServletRequest=RequestContext.getCurrentContext().getRequest();
    if(httpServletRequest.getRequestURI().contains("/restful-service"))
        return true;
    else
        return false;
   }

       @Override
       public int filterOrder() {
       return PreDecorationFilter.FILTER_ORDER+1;
   }

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

 }

Теперь сделайте запрос, этобудет работать на то, что вы хотите сделать.

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

свойство listOfServers поддерживает только хост и порт, но не путь.

...