gpt4 book ai didi

java - 根据查询参数动态更改 Zuul 中路由的 url

转载 作者:行者123 更新时间:2023-12-02 09:52:12 28 4
gpt4 key购买 nike

正如标题所示,我想根据给定的查询参数更改 url。例如,如果我请求:

  • http://api.company.com/path?service=A >> 到上游 A 的路由
  • http://api.company.com/path?service=B >> 到上游 B 的路由

我已经根据 this 尝试了多个不同的版本, this , thisthat 。这些示例都不起作用或提供完整的列表环境(代码+配置文件)。

当前非工作版本:

application.yml:

zuul:
ignoredServices: '*'
routes:
serviceA:
path: /statistics/**
url: http://localhost:3000/a
serviceB:
path: /statistics/**
url: http://localhost:3000/b

Zuul 的预过滤器

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;

import java.net.URL;

import static com.netflix.zuul.context.RequestContext.getCurrentContext;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.*;


public class QueryParamServiceIdPreFilter extends ZuulFilter {

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

public String filterType() {
return PRE_TYPE;
}

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

public Object run() {
RequestContext ctx = getCurrentContext();
HttpServletRequest request = ctx.getRequest();

// always null
URL routeHost = getCurrentContext().getRouteHost();

if ( "A".equals(request.getParameter("serviceUrl")) ) {
ctx.put("serviceId", "serviceA");
}

if ( "B".equals(request.getParameter("serviceUrl")) ) {
ctx.put("serviceId", "serviceB");
}

return null;
}
}

假微服务:

var express = require('express');
var app = express();
app.get('/a', function (req, res) {
res.send('Service A');
});

app.get('/b', function (req, res) {
res.send('Service B');
});

app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});

通话结果

$ curl "localhost:8071/statistics?serviceUrl=B" ;  echo; curl "localhost:8071/statistics?serviceUrl=A"
Service B
Service B⏎

最佳答案

您的代码看起来不错,您缺少的是服务发现。你说:

ctx.put("serviceId", "serviceA");

但是您没有定义服务 ID,而是使用服务 url,此处:

serviceA:
path: /statistics/**
url: http://localhost:3000/a

配置服务发现后,您将拥有:

serviceA:
path: /statistics/**
serviceId: serviceA

检查我的答案 herehere

关于java - 根据查询参数动态更改 Zuul 中路由的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56240085/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com