这是关于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;