spring - 测量一个请求发送到zuul代理的时间
问题描述
我在spring boot中制作了多个与zuul代理通信的微服务。我的问题是请求花费了太多时间,我想测量从请求到达代理所花费的时间以及请求的时间从代理转发到我的微服务。有没有办法做到这一点?谢谢!
解决方案
与此类似的其他方法可以使用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;
}
}
然后在 Post 过滤器中
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;
}
}
推荐阅读
- java - 如何在版本 Maven 插件中隐藏继承的依赖项?
- jquery - jquery函数不返回值
- r - 使用 « R » 解析日志文件
- python - Django uwsgi 被杀
- python - 在 Python 中使用嵌套的 for 循环生成输出文件,并得到无效的语法错误?
- java - 片段不会显示超过一项
- javascript - 使用 javascript 从调查中删除 td 类
- crystal-reports - 水晶报表将报表页脚移到详细信息上方
- javascript - 使用 XML HTTP 请求和 POST 方法向服务器发送 JSON 字符串
- typescript - 如何为 ngxs 动作实现 Debounce 模拟?