这是关于zuul和路由
This is about zuul and routing
这道题是关于zuul和路由的。现在在你的 application.yml 中获得 zuul 路由非常容易,你有以下
routes:
silver:
path: "/silver/**"
serviceId: "SILVER-MICO-SERVICE"
stripPrefix: true
gold:
path: "/gold/**"
serviceId: "GOLD-MICO-SERVICE"
stripPrefix: false
因此,如果您的 URL 中有白银,它将指向白银微服务,如果它有黄金,它将指向黄金微服务。
但是我有第三项服务,我想在将其定向到白银或黄金之前调用它。所以我想要类似
的东西
routes:
silver:
path: "/silver/**"
serviceId: "SILVER-MICO-SERVICE"
stripPrefix: true
gold:
path: "/gold/**"
serviceId: "GOLD-MICO-SERVICE"
stripPrefix: false
throttle
path: "/throttle/**"
serviceId: "THROTTLE-MICO-SERVICE"
stripPrefix: false
当说白银时
我的过滤器中会有以下内容,我会有一个 throttleFilter,它会调用 throttle 微服务。
但我不知道如何在 Java.
中编写 zuul 调用
感谢您的帮助
您不需要路由来限制微服务,因为您只能路由到一个微服务。相反,您可以编写预过滤器并调用 throttle 微服务。
这是一个如何编写前置过滤器的示例
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import javax.servlet.http.HttpServletRequest;
public class SimplePreFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
//You can apply custom logic if required
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
//TODO you can call throttle micro service here
return null;
}
}
好的,这是执行我想执行的操作的代码。我需要的功能由 EurekaClient
提供
zuul
throttling:
path: "/throttling/**"
serviceId: "SITE-THROTTLING"
stripPrefix: false
在我的代码中
@Autowired
private EurekaClient eurekaClient;
private boolean checkThrottling(String url) {
InstanceInfo service = eurekaClient
.getApplication("SITE-THROTTLING")
.getInstances()
.get(0);
StringBuilder sb = new StringBuilder(service.getHomePageUrl())
.append("/throttling")
.append("?paramUrl=")
.append(url);
return webSevice.sendPost(sb.toString());
public boolean sendPost(String url) {
WebClient webClient = WebClient.create();
Boolean flag = webClient.get()
.uri(url)
.retrieve()
.bodyToMono(Boolean.class)
.block();
return flag;
这道题是关于zuul和路由的。现在在你的 application.yml 中获得 zuul 路由非常容易,你有以下
routes:
silver:
path: "/silver/**"
serviceId: "SILVER-MICO-SERVICE"
stripPrefix: true
gold:
path: "/gold/**"
serviceId: "GOLD-MICO-SERVICE"
stripPrefix: false
因此,如果您的 URL 中有白银,它将指向白银微服务,如果它有黄金,它将指向黄金微服务。
但是我有第三项服务,我想在将其定向到白银或黄金之前调用它。所以我想要类似
的东西routes:
silver:
path: "/silver/**"
serviceId: "SILVER-MICO-SERVICE"
stripPrefix: true
gold:
path: "/gold/**"
serviceId: "GOLD-MICO-SERVICE"
stripPrefix: false
throttle
path: "/throttle/**"
serviceId: "THROTTLE-MICO-SERVICE"
stripPrefix: false
当说白银时
我的过滤器中会有以下内容,我会有一个 throttleFilter,它会调用 throttle 微服务。 但我不知道如何在 Java.
中编写 zuul 调用感谢您的帮助
您不需要路由来限制微服务,因为您只能路由到一个微服务。相反,您可以编写预过滤器并调用 throttle 微服务。 这是一个如何编写前置过滤器的示例
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import javax.servlet.http.HttpServletRequest;
public class SimplePreFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
//You can apply custom logic if required
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
//TODO you can call throttle micro service here
return null;
}
}
好的,这是执行我想执行的操作的代码。我需要的功能由 EurekaClient
提供zuul
throttling:
path: "/throttling/**"
serviceId: "SITE-THROTTLING"
stripPrefix: false
在我的代码中
@Autowired
private EurekaClient eurekaClient;
private boolean checkThrottling(String url) {
InstanceInfo service = eurekaClient
.getApplication("SITE-THROTTLING")
.getInstances()
.get(0);
StringBuilder sb = new StringBuilder(service.getHomePageUrl())
.append("/throttling")
.append("?paramUrl=")
.append(url);
return webSevice.sendPost(sb.toString());
public boolean sendPost(String url) {
WebClient webClient = WebClient.create();
Boolean flag = webClient.get()
.uri(url)
.retrieve()
.bodyToMono(Boolean.class)
.block();
return flag;