声明,老师讲过眼里过千遍不如手里过一遍。这个真的只是我的学习笔记,只是写个我自己看的,要是有雷同之处,海涵。想看大牛的博客,请移步这里http://blog.csdn.net/forezp/article/details/69788938
目前以我的理解能力,能看明白的就是一句话——哪个接口调用了哪个接口,传递了什么数据,花了多长时间。
Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可。
将Span和Trace在一个系统中使用Zipkin注解的过程图形化:
这三个项目分别是server-zipkin、service-hi、servicemiya。暂时理解为一个监控器两个服务提供者。
1.新建server-zipkin项目。
1.1 pom.xml文件引入zipkin依赖包。
4.0.0
com.byk
server-zipkin
0.0.1-SNAPSHOT
jar
server-zipkin
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
io.zipkin.java
zipkin-server
io.zipkin.java
zipkin-autoconfigure-ui
org.springframework.cloud
spring-cloud-dependencies
Camden.SR6
pom
import
org.springframework.boot
spring-boot-maven-plugin
1.2 application.properties文件指定端口号。
server.port=9411
1.3 主启动类加@EnableZipkinServer标签。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.EnableZipkinServer;
@SpringBootApplication
@EnableZipkinServer
public class ServerZipkinApplication {
public static void main(String[] args) {
SpringApplication.run(ServerZipkinApplication.class, args);
}
}
1.4 启动项目,浏览器访问http://localhost:9411,如下:
2 . 新建service-hi项目。
2.1 pom.xml文件。
4.0.0
com.byk
service-zipkin
0.0.1-SNAPSHOT
jar
service-hi
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-zipkin
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
Dalston.RC1
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
2.2 application.properties文件,指定端口号和服务名,并指定追踪器。
server.port=8988
spring.zipkin.base-url=http://localhost:9411
spring.application.name=service-hi
2.3 新建HomeController文件。指定请求路径信息。
import com.byk.servicehi.ServiceHiApplication;
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 org.springframework.cloud.sleuth.sampler.AlwaysSampler;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @Author: bian
* @Date: 2018/6/25 17:14
* @Todo:
*/
@RestController
public class HomeController {
private static final Logger LOG = Logger.getLogger(ServiceHiApplication.class.getName());
@Autowired
private RestTemplate restTemplate;
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@RequestMapping("/hi")
public String callHome(){
LOG.log(Level.INFO, "请求 service-hi ");
LOG.log(Level.INFO,"又跑去请求 http://localhost:8989/miya");
return restTemplate.getForObject("http://localhost:8989/miya", String.class);
}
@RequestMapping("/hello")
public String info(){
LOG.log(Level.INFO, "请求 service-hi ");
return "i'm service-hi";
}
@Bean
public AlwaysSampler defaultSampler(){
return new AlwaysSampler();
}
}
3.新建service-miya项目。
3.1 pom.xml文件
同service-hi项目。
3.2 application.properties 文件
server.port=8989
spring.zipkin.base-url=http://localhost:9411
spring.application.name=service-miya
3.3 新建HomeController文件。
import com.byk.servicemiya.ServiceMiyaApplication;
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 java.util.logging.Level;
import java.util.logging.Logger;
/**
* @Author: bian
* @Date: 2018/6/26 10:48
* @Todo:
*/
@RestController
public class HomeController {
private static final Logger LOG = Logger.getLogger(ServiceMiyaApplication.class.getName());
@Autowired
private RestTemplate restTemplate;
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@RequestMapping("/miya")
public String callHome(){
LOG.log(Level.INFO, "请求 service-miya ");
LOG.log(Level.INFO,"又请求 http://localhost:8988/hello ");
return restTemplate.getForObject("http://localhost:8988/hello", String.class);
}
@RequestMapping("/info")
public String info(){
LOG.log(Level.INFO, "请求 service-miya ");
return "i'm service-miya";
}
}
分别启动三个项目。
1.访问http://localhost:9411,如下:
2.访问http://localhost:8988/hi,如下:
3.查看之前server-zipkin的界面,切勿刷新。
3.1 点击Denpendencies,发现追踪器已经起作用了。
3.2 点击Find a trace ,查看具体的接口调用信息。
1.我自己新建的项目,pom.xml文件中版本是2.0.3.RELEASE,跑不起来,降低版本改成1.5.2,就可以了。
2.有时候(并不是每个人的项目都会出现这种情况)在Zipkin-Traces中看不到数据,那是因为默认sleuth收集信息的比率是0.1 ,针对于这个问题有两种解决方法:
@Bean
public AlwaysSampler defaultSampler(){
return new AlwaysSampler();
}
3.我的AlwaysSampler 一开始也报错,网上找的资料说把上面的代码改成
@Bean
public Sampler defaultSampler() {
return Sampler.ALWAYS_SAMPLE;
}
我试了,没用,还是直接复制个pom.xml文件管用。
获取源码https://github.com/bian1234/SpringCloudNote