06 分布式服务跟踪(入门)

本博客记录程序员DD的spring cloud Dalston版教程学习笔记
一、准备工作:
服务注册中心:eureka-server
微服务应用eureka-consumer-servicea、eureka-consumer-serviceb,直接将eureka-consumer-ribbon项目复制做修改。
eureka-consumer-serviceb实现一个REST接口/test2,eureka-consumer-servicea调用接口/test2
1.eureka-consumer-servicea修改,在DemoController中添加如下代码

private final Logger logger = Logger.getLogger(getClass());
......
 /**    
    * <p>Description:创建一个接口调用 eureka-consumer-serviceb的接口通过日志记录调用路径</p>
    * <p>version 1.0.0 </p>  
    * @author likai
    * @date 2019/8/29 10:55   
    */
    @RequestMapping(value = "/test1", method = RequestMethod.GET)
    public String test() {
        logger.info("===<call test1>===");
        return restTemplate.getForEntity("http://eureka-consumer-serviceb/test2", String.class).getBody();
    }

修改配置文件

#指定注册到eureka server上的服务名称
spring.application.name=eureka-consumer-servicea
#端口
server.port=8010
#指定eureka server通信地址
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
# 是否注册IP到eureka server,如不指定或设为false,那就会注册主机名到eureka server
eureka.client.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${random.int}


2…eureka-consumer-serviceb修改,在DemoController中添加如下代码

	private final Logger logger = Logger.getLogger(getClass());
	..........
    /**    
    * <p>Description:创建一个接口提供给eureka-consumer-servicea调用 </p>
    * <p>version 1.0.0 </p>  
    * @param
    * @return   
    * @author likai
    * @date 2019/8/29 10:57   
    */
    @RequestMapping(value = "/test2", method = RequestMethod.GET)
    public String trace() {
        logger.info("===<call test2>===");
        return "test";
    }

配置文件修改

#指定注册到eureka server上的服务名称
spring.application.name=eureka-consumer-serviceb
#端口
server.port=8011
#指定eureka server通信地址
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
# 是否注册IP到eureka server,如不指定或设为false,那就会注册主机名到eureka server
eureka.client.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${random.int}

3.启动服务
在这里插入图片描述
访问http://localhost:8010/test1观察后台日志
在这里插入图片描述
在这里插入图片描述

--service A
2019-08-29 11:23:30.214  INFO 5668 --- [nio-8010-exec-4] c.s.s.controller.DemoController          : ===<call test1>===
--service B
2019-08-29 11:23:30.220  INFO 4880 --- [nio-8011-exec-4] c.s.s.controller.DemoController          : ===<call test2>===

二、实现跟踪
在eureka-consumer-servicea、eureka-consumer-serviceb pom依赖管理中增加spring-cloud-starter-sleuth依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

到这里,实际上我们已经为service A和service B实现服务跟踪做好了基础的准备,重启service A和service B。访问http://localhost:8010/test1观察后台日志
在这里插入图片描述
在这里插入图片描述

--service A
2019-08-29 11:30:34.962  INFO [eureka-consumer-servicea,b4ae0fabb112f793,b4ae0fabb112f793,false] 8544 --- [nio-8010-exec-6] c.s.s.controller.DemoController          : ===<call test1>===
--service B
2019-08-29 11:30:34.968  INFO [eureka-consumer-serviceb,b4ae0fabb112f793,4df465b0ef103eed,false] 4780 --- [nio-8011-exec-3] c.s.s.controller.DemoController          : ===<call test2>===

[eureka-consumer-servicea,b4ae0fabb112f793,b4ae0fabb112f793,false] 从上面的控制台内容中可看出多了一些诸如这样的日志
,而这些元素正是实现分布式服务跟踪的重要组成部分,它们每个值的含义如下:

  1. 第一个值:eureka-consumer-servicea,它记录了应用的名称,也就是application.properties中spring.application.name参数配置的属性。
  2. 第二个值:b4ae0fabb112f793,Spring Cloud Sleuth生成的一个ID,称为Trace ID,它用来标识一条请求链路。一条请求链路中包含一个Trace ID,多个Span ID。
  3. 第三个值:b4ae0fabb112f793,Spring Cloud Sleuth生成的另外一个ID,称为Span ID,它表示一个基本的工作单元,比如:发送一个HTTP请求。
  4. 第四个值:false,表示是否要将该信息输出到Zipkin等服务中来收集和展示。
    上面四个值中的Trace ID和Span ID是Spring Cloud Sleuth实现分布式服务跟踪的核心。在一次服务请求链路的调用过程中,会保持并传递同一个Trace ID,从而将整个分布于不同微服务进程中的请求跟踪信息串联起来,以上面输出内容为例,eureka-consumer-servicea和eureka-consumer-serviceb同属于一个前端服务请求来源,所以他们的Trace ID是相同的,处于同一条请求链路中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值