发布网友 发布时间:2024-08-20 11:26
共1个回答
热心网友 时间:2024-08-23 04:09
在上一节中,我们讨论了当URI包含动态参数时,Sleuth默认获取的并非实际接口路径的问题,这可能导致链路跟踪统计出现误差。本文基于Sleuth 1.2.6版本,这个版本之后的解决方案是适用的。
为了解决这个问题,我们需要创建一个名为TraceLocalFilter的过滤器,它继承自TraceFilter。这个过滤器的代码大部分保持原样,只需在doFilter方法中添加必要的修改。下面仅展示关键部分的代码,需要替换的部分已经标注出来。
为了使用这些代码,需要将依赖的类复制到自己包下,更改包路径,以解决包访问权限问题。
将自定义的TraceLocalFilter注入到Spring容器中,通过替换new HandlerMappingIntrospector(ctx),确保在拦截请求和生成链路跟踪时使用我们自定义的类。
最后,配置skipPattern以确保正确处理特定的请求。整个过程分为两步:实现Filter和配置Spring环境。
通过利用Spring MVC的HandlerMapping,我们的解决方案能够从请求中获取到真实的URI路径,并将其应用到链路跟踪的uri信息中,从而解决动态参数带来的问题。