美文网首页
SpringCloud使用Zipkin实现链路跟踪

SpringCloud使用Zipkin实现链路跟踪

作者: 奋斗_登 | 来源:发表于2021-05-18 16:14 被阅读0次

    Zipkin主要提供链路追踪的可视化,原理为:在服务调用的请求和响应中加入ID,表明上下游请求的关系;利用这些关系;可以可视化分析服务调用链路和服务间的依赖关系。zipkin的依赖包含Sleuth的依赖。

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zipkin</artifactId>
                <version>2.2.8.RELEASE</version>
            </dependency>
        </dependencies>
    

    添加配置

    spring.application.name=Zipkin Demo
    server.port=8200
    spring.cloud.consul.host=127.0.0.1
    spring.cloud.consul.port=8500
    #因为只是消费者,不提供服务,所以设不注册到Consul 中
    spring.cloud.consul.discovery.register=false
    #pring.zipkin.base-url指定了Zipkin服务器的地址
    spring.zipkin.base-url=http://localhost:9411
    #设置使用http的方式传输数据
    spring.zipkin.sender.type=web
    #1.x版本需要设置为sleuth.sampler.percentage=1.0
    #spring.sleuth.sampler.percentage将采样比例设置为1.0,也就是全部都需要。
    sleuth.sampler.probability=1.0
    #为了更详细的查看服务通信时的日志信息,我们可以将Feign和Sleuth的日志级别设置为debug。在两个项目的配置文件中,加入如下内容即可:
    logging.level.org.springframework.cloud.openfeign=debug
    logging.level.org.springframework.cloud.sleuth=debug
    

    实现测试controller

    @RestController
    public class HelloController {
        private static Logger log = LoggerFactory.getLogger(DemoApplication.class);
        @Autowired
        private LoadBalancerClient loadBalancer;
        @Autowired
        private DiscoveryClient discoveryClient;
    
        /**
         * 获取所有服务提供者
         */
        @GetMapping("/instances-lists")
        public Object instancesLists() {
            return discoveryClient.getInstances("service-provider");
        }
    
        /**
         * 获取所有注册服务名称
         */
        @GetMapping("/services-lists")
        public Object servicesLists() {
            return discoveryClient.getServices();
        }
    
        /**
         * 获取所有order,缺省为0
         */
        @GetMapping("/order-lists")
        public Object orderLists() {
            return discoveryClient.description();
        }
    
        /**
         * 从所有服务中选择一个服务(轮询)
         */
        @GetMapping("/poll-service")
        public Object pollService() {
            return loadBalancer.choose("service-provider").getUri().toString();
        }
    
        /**
         * 调用服务提供者接口
         */
        @GetMapping("/hello")
        public String hello() {
            ServiceInstance serviceInstance = loadBalancer.choose("service-provider");
            URI uri = serviceInstance.getUri();
            String callService = new RestTemplate().getForObject(uri + "/hello", String.class);
            log.info(callService);
            return callService;
        }
    }
    

    其中service-provider 为简单实现hello的一个api
    访问服务消费者api http://localhost:8200/hello
    查看zipkin控制台


    相关文章

      网友评论

          本文标题:SpringCloud使用Zipkin实现链路跟踪

          本文链接:https://www.haomeiwen.com/subject/ofcyjltx.html