springcloud10-链路追踪(日志埋点追踪)组件Sleuth实战

1、微服务下的链路追踪讲解和重要性
  简介:讲解什么是分布式链路追踪系统,及使用好处

 

2、SpringCloud的链路追踪组件Sleuth实战
  简介:讲解分布式链路追踪组件Sleuth实战

  1、官方文档
    http://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#sleuth-adding-project

  2、什么是Sleuth
    一个组件,专门用于记录链路数据的开源组件

  [order-service,96f95a0dd81fe3ab,852ef4cfcdecabf3,false]

    1、第一个值,spring.application.name的值

    2、第二个值,96f95a0dd81fe3ab ,sleuth生成的一个ID,叫Trace ID,用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID

    3、第三个值,852ef4cfcdecabf3、spanid 基本的工作单元,获取元数据,如发送一个http

    4、第四个值:false,是否要将该信息输出到zipkin服务中来收集和展示。

3、添加依赖(所有涉及项目都要加此依赖)
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
  </dependency>

 

 

 


3、SpringCloud的链路追踪组件Sleuth常见问题说明
简介:讲解分布式链路追踪组件Sleuth常见问题说明

日志不输出?需要加入日志埋点

如:

1.产品服务中(product-service)

package com.example.demo.service;

import com.example.demo.domain.Product;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * Created by zhangjiawen on 2019/5/17.
 */
@Service
public class ProductServiceImpl implements ProductService {
    private static final Map<Integer,Product> map=new HashMap<Integer,Product>();
    private final Logger logger = LoggerFactory.getLogger(getClass());

    static {
        Product p1=new Product(1,"荣耀8X",20000,200);
        Product p2=new Product(2,"iPhoneX",254,233);
        Product p3=new Product(3,"三星S10",3546,444);
        Product p4=new Product(4,"iPhone8",4567,555);
        Product p5=new Product(5,"电脑",6745,666);
        map.put(p1.getId(),p1);
        map.put(p2.getId(),p2);
        map.put(p3.getId(),p3);
        map.put(p4.getId(),p4);
        map.put(p5.getId(),p5);
    }

    @Override
    public List<Product> getProductList() {
        Collection<Product> collection= map.values();
        return  new ArrayList<>(collection);
    }

    @Override
    public Product getProductById(int id) {
        logger.info("service product findByid");
        return map.get(id);
    }
}

 

2.订单服务中(order-service)

package com.example.demo.service.impl;

import com.example.demo.domain.ProductOrder;
import com.example.demo.service.ProductClient;
import com.example.demo.service.ProductOrderService;
import com.example.demo.util.JsonUtils;
import com.fasterxml.jackson.databind.JsonNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.Date;
import java.util.UUID;

@Service
public class ProductOrderServiceImpl implements ProductOrderService {


    @Autowired
    private RestTemplate restTemplate;
    @SuppressWarnings("SpringJavaAutowiringInspection")
    @Autowired
    private ProductClient productClient;
    private  final Logger logger= LoggerFactory.getLogger(getClass());


    //用FeignClient方式实现
    @Override
    public ProductOrder save2(int userId, int productId) {
        logger.info("servic save2 order");
        String strProduct = productClient.findById(productId);
        JsonNode jsonNode = JsonUtils.str2JsonNode(strProduct);
        //System.out.println(strProduct);

        ProductOrder productOrder = new ProductOrder();
        productOrder.setCreateTime(new Date());
        productOrder.setUserId(userId);
        productOrder.setTradeNo(UUID.randomUUID().toString());
        productOrder.setProductName(jsonNode.get("name").toString());
       // System.out.println(productOrder.getProductName());


        return productOrder;
    }
}

 

posted @ 2019-05-30 11:23  valar-dohaeris  阅读(2391)  评论(0)    收藏  举报