【问题标题】:How to select route based on header in Zuul如何在 Zuul 中根据 header 选择路由
【发布时间】:2018-07-10 08:06:43
【问题描述】:

我在我的服务 A 和 B 前使用 Netflix Zuul 代理。

如何让 Zuul 代理根据传入请求中的 HTTP 标头在到 A 和 B 的路由之间进行选择?

【问题讨论】:

    标签: netflix-zuul spring-cloud-netflix


    【解决方案1】:

    您应该根据您的逻辑创建一个预过滤器。像这样:

    @Component
    public class RedirectionFilter extends ZuulFilter {
    
    @Override
    public String filterType() {
       return "pre";
    }
    
    @Override
    public int filterOrder() {
       return 2;
    }
    
    @Override
    public boolean shouldFilter() {
      return true;
    }
    
    @Override
    public Object run() {
      RequestContext ctx = RequestContext.getCurrentContext();
      HttpServletRequest request = ctx.getRequest();`
      String header = request.getHeader("YOUR_HEADER_PARAM");
    
      if ("YOUR_A_LOGIC".equals(header) ) {
        ctx.put("serviceId", "serviceA");
        //ctx.setRouteHost(new URL("http://Service_A_URL”));
      } else { // "YOUR_B_LOGIC"
        ctx.put("serviceId", "serviceB");
        //ctx.setRouteHost(new URL("http://Service_B_URL”));
      }
      log.info(String.format("%s request to %s", request.getMethod(), 
      request.getRequestURL().toString()));
      return null;
     }
    

    我不确定 100% 关于重定向部分,但这是满足您需求的开始。 我添加了重定向的第二个选项(注释行),也许这两个选项之一会对您有所帮助。

    另见this example

    【讨论】:

    • 当我对这个主题进行更多研究时,我发现第一个选项的过滤顺序应该小于 5,而第二个选项应该大于 5。 5 是称为 PreDecorationFilter 的内置过滤器的顺序
    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2020-04-29
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多