springcloud链路追踪 (zipkin)

坑(springcloud bus和zipkin冲突)
如果在服务中使用了如下依赖,则会导致zipkin链路追踪失效,解决办法有两个

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-bus-amqp</artifactId>
		</dependency>

解决方法1:将下文中的链路追踪配置改为,应为当有如上依赖时,zipkin默认会使用rabbitmq传递信息,所以需要指明仍然通过http传递数据

#spring.zipkin.base-url=http://localhost:9411
spring.sleuth.sampler.percentage=1.0
spring.sleuth.web.client.enabled=true
spring.zipkin.sender.type=web

解决方法2: 配置成rabbitmq传递数据,将下文的链路追踪配置改为,并增加rabbitmq的配置项

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest


#spring.zipkin.base-url=http://localhost:9411  该配置项注释掉
spring.sleuth.sampler.percentage=1.0
spring.sleuth.web.client.enabled=true
spring.zipkin.sender.type=web

增加使用rabbitmq传递数据的依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
		</dependency>

链路追踪服务启动时增加rabbitmq地址参数

java -jar zipkin-server.jar   --zipkin.collector.rabbitmq.addressed=localhost:5672

一:实现基础

包括一个服务注册中心,一个服务提供者A(暴露一个接口),一个服务消费者B(调用服务提供者的接口)

二:zipkin服务

从官网下载相应的jar包到cmd中执行 java -jar zipkin-*.jar 即可启动一个链路追踪服务,打开浏览器访问 127.0.0.1:9411 就可以看到服务界面
在这里插入图片描述

三:在原来的服务中支持链路追踪

在原来的项目中引入依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-sleuth</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zipkin</artifactId>
		</dependency>

并在配置文件application.properties中添加链路zipkin的配置

spring.sleuth.web.client.enabled=true
spring.sleuth.probability=1.0
spring.zipkin.base-url=http://localhost:9411

修改服务消费者B调用接口的代码

package com.message;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import brave.sampler.Sampler;

@RestController
public class getString {

	@Autowired
	private RestTemplate restTemplate;

	@Bean
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}
	
	@RequestMapping("/getApp3")
	public String index() {
		return restTemplate.getForObject("http://localhost:8084/getString", String.class);
	}

	@RequestMapping("/getString")
	public String info() {
		return "success";
	
	@Bean
	public Sampler defaultSampler() {
		return Sampler.ALWAYS_SAMPLE;
	}

}

在以上代码中该服务B调用了服务A提供的接口getString

最后启动(zipkin服务已启动)注册中心,服务A,服务B,然后在浏览器中调用服务B暴露的接口,服务B再调用服务A拿到数据返回,此时进入到链路追踪服务的页面127.0.0.1:9411点击查找即可看到我们的服务调用链路
在这里插入图片描述
demo下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值