系统在生产环境出现问题时,排查问题最好的方式就是查看日志了,日志的记录尽量详细,这样你才能快速定位问题。
下面带大家学习如何在 Zuul 中输出请求响应的信息来辅助我们解决一些问题。需要框架源码的朋友可以看我个人简介联系我
熟悉 Zuul 的朋友都知道,Zuul 中有 4 种类型过滤器,每种都有特定的使用场景,要想记录响应数据,那么必须是在请求路由到了具体的服务之后,返回了才有数据,这种需求就适合用 post 过滤器来实现了。代码如下所示。
输出效果如图 1 所示。
获取响应内容的第一种方式,代码如下所示。
获取响应内容的第二种方式,代码如下所示。
为什么上面两种方式可以取到响应内容?
在 RibbonRoutingFilter 或者 SimpleHostRoutingFilter 中可以看到下面一段代码,代码如下所示。
forward() 方法对服务调用,拿到响应结果,通过 setResponse() 方法进行响应的设置,代码如下所示。
上面第一行代码就可以解释我们的第一种获取的方法,这里直接把响应内容加到了 RequestContext 中。
第二种方式的解释就在 helper.setResponse 的逻辑里面了,代码如下所示。
public void setResponse(int status, InputStream entity, MultiValueMap<String, String> headers) throws IOException {
RequestContext context = RequestContext.getCurrentContext();
context.setResponseStatusCode(status);
if (entity != null) {
context.setResponseDataStream(entity);
}
// .....
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70006413/viewspace-2793545/ ,如需转载,请注明出处,否则将追究法律责任。