Zuul根据登录用户代理到不同的URL

时间:2018-04-28 07:05:30

标签: java spring-cloud netflix-zuul

我正在设计一些机器人农场,每个用户都有自己的机器人,我想实现以下目标

  1. 用户登录Web服务器
  2. 然后Zuul服务器将提取 从数据库中获取特定用户机器人的IP
  3. Zuul将扮演一个角色 反向代理到机器人,与其他用户能够做同样的事情 当然并行
  4. 到目前为止,我看到了根据路径重定向到特定服务的示例。但根据登录用户的机器人IP动态执行此操作是否可行?

1 个答案:

答案 0 :(得分:0)

我能够通过编写以下过滤器来实现它:

  @Override
  public String filterType() {
    return PRE_TYPE;
  }

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

  public Object run() {
    RequestContext ctx = getCurrentContext();
    ctx.put(REQUEST_URI_KEY, "/test/");
    try {
      if (new Random().nextInt(10) > 5) {
        ctx.setRouteHost(new URL("http://192.168.1.14:8088"));
      } else {
        ctx.setRouteHost(new URL("http://192.168.1.14:8089"));
      }
    } catch (MalformedURLException e) {
      log.error("", e);
    }
  return null;
  }

我的application.properties看起来像这样:

spring.application.name=zuul-server
server.port=8080
management.endpoints.web.exposure.include=*
zuul.routes.test.path=/test/**