SpringCloud成长笔记(五)链路跟踪(Zipkin+rabbitMQ)

一、简介

微服务拆分的越详细,随之带来的问题就是跨微服务之间的调用,之前我们介绍过微服务之间的调用可以使用feign,那么服务接口之间的如何链路跟踪就是必须解决的问题,这时候就需要zipkin来帮我们解决这个问题。

二、环境搭建

这一节,我们使用springboot2.0.3版本,SpringCloud使用Finchley.Release版本。然后引入rabbitMQ作为链路跟踪的消息中间件。

三、源码

新建两个微服务,一个用于fegin的调用微服务,另一个用于自动zipkin进行跟踪
pom.xml引入依赖的包

<!-- 分布式链路追踪 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
            <version>2.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
            <version>2.0.0.RELEASE</version>
		</dependency>
		<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>

feign微服务,新建一个RERTController,第一个提供原始的test api,第二个用于feigin调用

@RestController
public class FeignController{

    @Autowired
    private FeignService feignService;

    @RequestMapping(value = "/test",method = RequestMethod.GET)
    public String test(String name ){
        return name;
    }


    @RequestMapping(value = "/test2",method = RequestMethod.GET)
    public String test2(String name ){
        return feignService.test(name);
    }
}

zipkin的微服务用来验证使用resttemplate测试的情况

@RestController
public class ZipKinTest {

    @RequestMapping(value = "/test1")
    public String test(){
        return "test";
    }

    @RequestMapping(value = "/test")
    public String test(@RequestParam(value = "name")String name){
        return "test:"+name;
    }
    @RequestMapping(value = "/test2")
    public String test2(){
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForEntity("http://localhost:8201/test",String.class).getBody();
    }
}

feign配置文件application.properties

#tomcat config
spring.application.name=bg-cloud-feign-server
server.port=18903

#注册中心
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/
eureka.instance.prefer-ip-address=true
eureka.instance.status-page-url-path=/actuator/info
eureka.instance.health-check-url-path=/actuator/health

# 链路跟踪
spring.zipkin.rabbitmq.queue=zipkin
spring.zipkin.sender.type=rabbit
spring.zipkin.locator.discovery.enabled=true
spring.sleuth.sampler.probability=1.0


rabbitmq.host=127.0.0.1
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=guest

zipkin的微服务配置文件application.properties

server.port=8201
spring.application.name= bg-cloud-zipkin

spring.zipkin.rabbitmq.queue=zipkin
spring.zipkin.sender.type=rabbit
spring.zipkin.locator.discovery.enabled=true
spring.sleuth.sampler.probability=1.0


rabbitmq.host=127.0.0.1
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=guest

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=ALWAYS
eureka.instance.leaseRenewalIntervalInSeconds=10
eureka.instance.health-check-url-path=/actuator/health
eureka.client.registryFetchIntervalSeconds=5
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

四、运行

1、安装部署rabbitMQ

先安装OTP

安装rabbitMQ

开始插件管理
rabbitmq-plugins.bat enable rabbitmq_management

添加用户
rabbitmqctl.bat list_users

rabbitmqctl.bat add_user admin 888888
启动rabbitMQ
rabbitmqctl.bat set_user_tags admin administrator

localhost:15672
在这里插入图片描述

2、启动zipkin

启动zipkin,默认端口9411
注意用户名密码的授权及正确性
运行下面命令启动zipkin服务器
java -DRABBIT_ADDRESSES=127.0.0.1:5672 -DRABBIT_USER=guest -DRABBIT_PASSWORD=guest -jar zipkin-server-2.11.6-exec.jar

在这里插入图片描述

3、启动zipkin和feign的微服务

启动eureka server,自动zipkin微服务,启动feign微服务
在这里插入图片描述
启动微服务后运行接口
在这里插入图片描述
这时候再熟悉zipkin的页面,可以发现两个微服务已经出现在service Name的下拉列表中了。
在这里插入图片描述
跟踪之前接口的调用情况
在这里插入图片描述
每个接口调用的时长,以及链路的依赖
在这里插入图片描述
在这里插入图片描述

五、github源码

Github

六、参考资料

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值