测量请求发送到zuul proxy的时间

Tr *_*rin 1 spring spring-boot spring-cloud netflix-zuul

我在 Spring Boot 中创建了多个微服务,它们与 zuul 代理进行通信。我的问题是请求花费了太多时间,我想测量从请求到达代理所花费的时间以及请求的时间从代理转发到我的微服务。有什么方法可以做到这一点吗?谢谢!

lcz*_*ski 5

与此类似的其他方法可以使用 来完成ZuulFilter。下面的代码是在没有检查的情况下编写的,因此可能存在一些错误,但它应该显示出想法。首先添加前置过滤器

public class PreFilter extends ZuulFilter {

    private static final Logger logger = LoggerFactory.getLogger(PreFilter.class);

    @Override
    public int filterOrder() {
        return PRE_DECORATION_FILTER_ORDER - 1; // run before PreDecoration
    }

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

    @Override
    public boolean shouldFilter() {
        return true;
    }
    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        long startTime = Instant.now().toEpochMilli();
        logger.info("Request URL::" + request.getRequestURL().toString() +
        ":: Start Time=" + Instant.now());
        ctx.put("startTime", startTime);
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在后置过滤器中

public class PostFilter extends ZuulFilter {

    private static final Logger logger = LoggerFactory.getLogger(PostFilter.class);
    @Override
    public String filterType() {
        return POST_TYPE;
    }

    @Override
    public int filterOrder() {
        return SEND_RESPONSE_FILTER_ORDER - 1;
    }

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

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        long startTime = (Long) ctx.get("startTime");

        logger.info("Request URL::" + request.getRequestURL().toString() +
   ":: Time Taken=" + (Instant.now().toEpochMilli() - startTime));
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)