前言
SpringCloud 是微服务中的翘楚,最佳的落地方案。
难直接确定是由哪个服务引起的,所以就有了 Spring Cloud Sleuth 链路跟踪。通过它,我们就可以很清楚直观
的了解每一个服务请求经过了哪些服务,用时多久,谁依赖谁或者被谁依赖。
代码
-
product-service
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
-
service层
@Override public Product findById(int id) { logger.info("product service"); return daoMap.get(id); }
-
-
order-service
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
-
web层
1 @RequestMapping("/save") 2 @HystrixCommand(fallbackMethod = "saveOrderFail") 3 public Object save(@RequestParam("user_id") int userId, @RequestParam("product_id") int productId, HttpServletRequest request) { 4 // String token = request.getHeader("token"); 5 // String cookie = request.getHeader("cookie"); 6 logger.info("order service"); 7 // System.out.println(token); 8 // System.out.println(cookie); 9 Map<String, Object> data = new HashMap<>(); 10 data.put("code", 0); 11 data.put("data", productOrderService.save(userId, productId)); 12 return data; 13 }
-
-
执行结果
order
-
2019-10-22 20:12:33.130 INFO [order-service,bc9f3fc07473127b,4069d9f942d534fe,false] 15784 --- [derController-2] c.t.o.controller.OrderController : order service
-
product
2019-10-22 20:12:33.138 INFO [product-service,bc9f3fc07473127b,88a890468bdb7e73,false] 15076 --- [nio-8772-exec-5] c.t.p.service.impl.ProductServiceImpl : product service
总结:
1、第一个值,spring.application.name的值
2、第二个值,96f95a0dd81fe3ab ,sleuth生成的一个ID,叫Trace ID,用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID
3、第三个值,852ef4cfcdecabf3、spanid 基本的工作单元,获取元数据,如发送一个http
4、第四个值:false,是否要将该信息输出到zipkin服务中来收集和展示。