如何使用 zuul 代理过滤器路由到外部 url
how to route to an external url using zuul proxy filter
我有一个外部 url,我想通过 zuul 过滤器传递一些请求 header 来启动应用程序。
谁能帮我解决这个问题。
在我的自定义预过滤器中,我写了这个:
@Component
public class CustomFilters extends ZuulFilter {
public static final Logger logger = LoggerFactory.getLogger(CustomFilters.class);
@Override
public String filterType() {
return "route";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
logger.info("executing run ");
RequestContext ctx = RequestContext.getCurrentContext();
ctx.addZuulRequestHeader("x-forwarded-host", "<external url>");
ctx.addZuulRequestHeader("x-forwarded-proto", "https");
ctx.addZuulRequestHeader("x-forwarded-port", "8800");
ctx.addZuulRequestHeader("key", "id);
return null;
}
}
app.properties:
ribbon.eureka.enabled=false
server.port=8080
zuul.routes.books.sensitive-headers=
zuul.routes.books.path = /books/
zuul.routes.books.url = <ext url>
示例应用程序:
这让我休息 url,通过它我重定向到上面在我的属性文件中定义的外部 url。
public class SampleApplication {
@RequestMapping(value = "/check")
public String available() {
return "available!";
}
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
app.properties:
spring.application.name=book
server.port=8090
发布截图
zuul:
routes:
users:
path: /myusers/**
url: http://example.com/users_service
这些简单的 url-routes 不会作为 HystrixCommand 执行,也不会使用 Ribbon 负载平衡多个 URL。为实现这些目标,您可以使用静态服务器列表指定 serviceId,如下所示:
zuul:
routes:
echo:
path: /myusers/**
serviceId: myusers-service
stripPrefix: true
hystrix:
command:
myusers-service:
execution:
isolation:
thread:
timeoutInMilliseconds: ...
myusers-service:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
ListOfServers: http://example1.com,http://example2.com
ConnectTimeout: 1000
ReadTimeout: 3000
MaxTotalHttpConnections: 500
MaxConnectionsPerHost: 100
在你的过滤器中,确保这个过滤器应该只在使用 uri example1.com 或 example2.com 的请求中出现,通过执行应该过滤方法
我有一个外部 url,我想通过 zuul 过滤器传递一些请求 header 来启动应用程序。 谁能帮我解决这个问题。 在我的自定义预过滤器中,我写了这个:
@Component
public class CustomFilters extends ZuulFilter {
public static final Logger logger = LoggerFactory.getLogger(CustomFilters.class);
@Override
public String filterType() {
return "route";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
logger.info("executing run ");
RequestContext ctx = RequestContext.getCurrentContext();
ctx.addZuulRequestHeader("x-forwarded-host", "<external url>");
ctx.addZuulRequestHeader("x-forwarded-proto", "https");
ctx.addZuulRequestHeader("x-forwarded-port", "8800");
ctx.addZuulRequestHeader("key", "id);
return null;
}
}
app.properties:
ribbon.eureka.enabled=false
server.port=8080
zuul.routes.books.sensitive-headers=
zuul.routes.books.path = /books/
zuul.routes.books.url = <ext url>
示例应用程序: 这让我休息 url,通过它我重定向到上面在我的属性文件中定义的外部 url。
public class SampleApplication {
@RequestMapping(value = "/check")
public String available() {
return "available!";
}
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
app.properties:
spring.application.name=book
server.port=8090
发布截图
zuul:
routes:
users:
path: /myusers/**
url: http://example.com/users_service
这些简单的 url-routes 不会作为 HystrixCommand 执行,也不会使用 Ribbon 负载平衡多个 URL。为实现这些目标,您可以使用静态服务器列表指定 serviceId,如下所示:
zuul:
routes:
echo:
path: /myusers/**
serviceId: myusers-service
stripPrefix: true
hystrix:
command:
myusers-service:
execution:
isolation:
thread:
timeoutInMilliseconds: ...
myusers-service:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
ListOfServers: http://example1.com,http://example2.com
ConnectTimeout: 1000
ReadTimeout: 3000
MaxTotalHttpConnections: 500
MaxConnectionsPerHost: 100
在你的过滤器中,确保这个过滤器应该只在使用 uri example1.com 或 example2.com 的请求中出现,通过执行应该过滤方法