Zipkin主要提供链路追踪的可视化,原理为:在服务调用的请求和响应中加入ID,表明上下游请求的关系;利用这些关系;可以可视化分析服务调用链路和服务间的依赖关系。zipkin的依赖包含Sleuth的依赖。
- 搭建Zipkin服务
zipkin的安装很简单参考官网即可:https://zipkin.io/pages/quickstart
启动成功后访问:http://localhost:9411/zipkin/ 即可进入控制台 - 创建服务消费者
项目中添加的依赖为:
<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控制台
网友评论