微服务拆分的越详细,随之带来的问题就是跨微服务之间的调用,之前我们介绍过微服务之间的调用可以使用feign,那么服务接口之间的如何链路跟踪就是必须解决的问题,这时候就需要zipkin来帮我们解决这个问题。
这一节,我们使用springboot2.0.3版本,SpringCloud使用Finchley.Release版本。然后引入rabbitMQ作为链路跟踪的消息中间件。
新建两个微服务,一个用于fegin的调用微服务,另一个用于自动zipkin进行跟踪
pom.xml引入依赖的包
org.springframework.cloud
spring-cloud-stream-binder-rabbit
2.0.0.RELEASE
org.springframework.cloud
spring-cloud-starter-stream-rabbit
2.0.0.RELEASE
org.springframework.cloud
spring-cloud-starter-sleuth
org.springframework.cloud
spring-cloud-starter-zipkin
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/
先安装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
启动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
启动eureka server,自动zipkin微服务,启动feign微服务
启动微服务后运行接口
这时候再熟悉zipkin的页面,可以发现两个微服务已经出现在service Name的下拉列表中了。
跟踪之前接口的调用情况
每个接口调用的时长,以及链路的依赖
Github