标签:star final group pos netflix one lazy 避免 如何
在开始使用Sleuth之前,需要先确定一下我们追踪之后应该如何显示。此处我选择使用zipkin,但由于zipkin与SpringBoot2.x系列不兼容,因此无法在工程中引入一个单独的zipkin组件。通过如下方式启动一个zipkin Docker容器:
docker run -d -p 9411:9411 openzipkin/zipkin
启动之后,访问:9411/zipkin,可以进入zipkin主页:
接下来,为每一个独立的服务引入如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <version>2.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <version>2.2.2.RELEASE</version> </dependency>
远端配置文件中加入如下内容:
spring: zipkin: base-url: http://10.177.48.24:9411/ sleuth: sampler: percentage: 1.0
sampler参数指定了采样率,范围从0.0-1.0。由于是测试环境,因此设置为1.0全采样。如果生产环境并发较高时,需要调低采样率,避免过载。
重新启动应用,而后尝试通过网关进行服务调用,在服务控制台可以看到类似输出:
前面的一串随机字符就是traceId。此时在zipkin中已经可以看到调用链路信息:
同样地,可以通过这一串traceId在zipkin中直接查询。
更进一步地,我们在Zuul中将traceId放入请求头部,并在接下来的调用链中一直保持,一直到返回客户端,这样,客户端可以凭借traceId直接查找本地调用的链路。此步骤需要实现一个Zuul过滤器:
package com.aac.acoustics.api.platform.zuul.filter; import brave.Tracer; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.springframework.stereotype.Component; @Component public class TraceIdFilter extends ZuulFilter { private final Tracer tracer; public TraceIdFilter(Tracer tracer) { this.tracer = tracer; } @Override public String filterType() { return "post"; } @Override public int filterOrder() { return 1; } @Override public boolean shouldFilter() { return true; } @Override public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); ctx.getResponse().addHeader("scd-trace-id",tracer.currentSpan().context().traceIdString()); return null; } }
这样配置之后,再次尝试调用时,在服务返回的响应头中,将存在一个scd-trace-id的属性,其值为traceId:
标签:star final group pos netflix one lazy 避免 如何
原文地址:https://www.cnblogs.com/liuxiaopen1995/p/13820579.html