本章使用上一章的实例【SpringCloud】Spring Cloud Sleuth + Zipkin 服务调用链路追踪(二十五)
查看Spring Cloud Sleuth请求链路中请求头
1、修改项目中(springcloud-provider-sleuth-payment8010)作为Sleuth服务提供者的Controller,内容如下:
1 @RestController 2 @Slf4j 3 public class PaymentController { 4 5 @GetMapping("/payment/zipkin") 6 public String paymentZipkin(HttpServletRequest request){ 7 System.out.println(getHeadersInfo(request)); 8 System.out.println("traceid ====== " + tracer.currentSpan().context().traceIdString()); 9 return "Hi, this is payment zipkin server"; 10 } 11 12 // 获取Header头中的信息 13 private Map<String, String> getHeadersInfo(HttpServletRequest request) { 14 Map<String, String> map = new HashMap<String, String>(); 15 Enumeration headerNames = request.getHeaderNames(); 16 while (headerNames.hasMoreElements()) { 17 String key = (String) headerNames.nextElement(); 18 String value = request.getHeader(key); 19 System.out.println(key + " ======> " + value); 20 map.put(key, value); 21 } 22 return map; 23 } 24 }
2、测试
1)重新启动项目
2)访问地址:http://127.0.0.1:7995/consumer/payment/zipkin,正常获取内容
可以从请求头中获取信息,其中常用的请求头代表的信息如下
* X-B3-TraceId:一条请求链路(Trace)的唯一标识,必须值
* X-B3-SpanId:一个工作单元(Span)的唯一标识,必须值
* X-B3-ParentSpanId::标识当前工作单元所属的上一个工作单元
* X-B3-Sampled::是否采样,1表示需要被输出,0表示不需要被输出
应用中获取TraceId
1、在Controller中自动注入Tracer
1 import brave.Tracer; 2 .... 3 4 @RestController 5 @Slf4j 6 public class PaymentController { 7 8 @Autowired 9 private Tracer tracer; 10 11 @GetMapping("/payment/zipkin") 12 public String paymentZipkin(HttpServletRequest request){ 13 14 15 System.out.println("traceid ====== " + tracer.currentSpan().context().traceIdString()); 16 .... 17 18 return "Hi, this is payment zipkin server"; 19 } 20 21 }
2、测试
1)重新启动项目
2)查看控制台输出
应用日志
1、修改项目中(springcloud-provider-sleuth-payment8010)作为Sleuth服务提供者的Controller,内容如下:
1 log.info("Hi, this is payment zipkin server");
2、测试
1)重新启动项目
2)访问地址:http://127.0.0.1:7995/consumer/payment/zipkin,正常获取内容
3)查看控制台输出
其中第一个代表应用名,
第二个代表Trace ID,标识一条请求链路,
第三个代表基本工作单元
第三个代表是否将日志输出到Zipkin等服务中来收集和展示,注意采用使用1才为true,默认为0.1,则为false