spring-cloud-zipkin简单使用
- zipkin简介:
- 搭建zipkin服务器:
- 这里我们使用第二种方式:
- 接下来搭建其他服务:
zipkin简介:
在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟过高或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了。Spring Cloud Sleuth 提供了分布式服务链路监控的解决方案。下面介绍 Spring Cloud Sleuth 整合 Zipkin 的解决方案。但是这一篇就简单的使用一下zipkin,这种方式有一定的弊端,表现在zipkin记录调用链路消息的传递时消耗时间,时间开销不可忽视,有机会的话整合一下mq,优化zipkin。
搭建zipkin服务器:
有三种安装方法:
Zipkin的使用比较简单,官网有说明几种方式:
1、容器
Docker Zipkin项目能够建立docker镜像,提供脚本和docker-compose.yml来启动预构建的图像。最快的开始是直接运行最新镜像:
docker run -d -p 9411:9411 openzipkin/zipkin
2、下载jar
如果你有java 8或更高版本,上手最快的方法是下载一个zipkinserver.xx.jar并运行,详情参看
#win 打开cmd 执行如下命令:
java -jar zipkin.jar
3、下载源代码运行
Zipkin可以从源运行,如果你正在开发新的功能。要实现这一点,需要获取Zipkin的源代码并构建它。
git clone https://github.com/openzipkin/zipkin
cd zipkin
# Build the server and also make its dependencies
./mvnw -DskipTests --also-make -pl zipkin-server clean install
# Run the server
java -jar ./zipkin-server/target/zipkin-server-*exec.jar
这里我们使用第二种方式:
启动我们的zipkin服务:访问http://127.0.0.1:9411/,看到如下界面表示服务已经启动成功
接下来搭建其他服务:
- 所需服务,eureka-server , 服务提供方,服务调用方。
如图我这里启动了五个服务。 - EurekaServerApplication 注册中心。
- LocalApplication 对外提供接口。http://localhost:9000/hello
- ConsumerApplication LocalApplication 调用ConsumerApplication
- ClientAApplication LocalApplication 调用ClientAApplication
- ClientApplication ClientAApplication 调用ClientApplication
ConsumerApplication 和 ClientAApplication 是集群服务
调用关系如图:
依赖如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
配置如下:
spring:
application:
name: consumer-service
zipkin:
#Zipkin Server 的 ip:port,这里换成自己的 Zipkin Server 的 IP 即可
# base-url: http://192.168.174.128:9411/
#为了测试 rabbitmq 的集成,修改为错误指向
base-url: http://127.0.0.1:9411/
#这里把抽样百分比设置为1,即信息全部采集
sleuth:
sampler:
probability: 1.0
下面开始测试:
调用链路关系已经很明了了,包括响应时间都明明白白。
这里有一个坑,zipkin和ribbon同时使用时,要将ribbon的调用方式配置注释掉,不然的话,zipkin会认为实例已死,一直走熔断。