美文网首页
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