总体

sleuth 和底层brave 都有很多instrument,根据协议不同instrument实现方式也不同。

对于Feign ,在consumer及producer实现也不一样,在consumer端,依托feign client 实现,主要是在feign header加入trace相关信息。
在consumer 端,如果失败,会自动产生一个fallback Span,无论是否使用ribbon,最后调用feign进行组装、发送的代码在TracingFeignClient类。

在producer 端,是按servlet来处理,依托brave servlet tracing filter来实现,sleuth基本没有什么代码。

autoconfig类:

consumer
TraceFeignClientAutoConfiguration

  • final class SleuthFeignBuilder
  • 根据feign.hystrix.enabled 的值创建Feign

producer

public class TraceWebServletAutoConfiguration

@Bean
public FilterRegistrationBean traceWebFilter

@ConfigurationProperties(“spring.sleuth.web”)
public class SleuthWebProperties 来设置skip的url等

默认使用 brave servlet 的tracingFilter类:public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)生成span:
Span span = handler.handleReceive(newHttpServerRequest(httpRequest));

feign context处理

class TraceFeignContext extends FeignContext
默认打开ribbon模式
返回:TraceLoadBalancerFeignClient,使用ribbonPresent :依托class是否存在进行判断
非ribbon模式 返回:LazyTracingFeignClient

consumer 执行过程

TraceLoadBalancerFeignClient的public Response execute(Request request, Request.Options options) throws IOException 为入口。

Span fallbackSpan = tracer().nextSpan().start(); 调用失败自动生成一个fallback span
sleuth 注入feign request 默认没有使用interceptor

Request targetRequest(RequestTemplate template) {for (RequestInterceptor interceptor : requestInterceptors) {interceptor.apply(template);}return target.apply(template);}

request的client 为

org.springframework.cloud.sleuth.instrument.web.client.feign.LazyTracingFeignClient

Lazy调用TracingFeignClient类,负责执行和填充trace信息
使用Span span = handleSend(headers, request, null);-填充trace信息到header中,然后调用feign生成request并发送

sleuth feign instrument 分析相关推荐

  1. feignclient url_对Feign的请求url 重写

    需求:对当前请求的 url 重新构建 debug feign 的执行可知,重写 LoadBalancerFeignClient 类中的 execute 方法即可控制当前请求的url 代码分析 当引入  ...

  2. Spring Cloud Sleuth 配置说明

    名称 默认值 说明 spring.sleuth.async.configurer.enabled true 启用默认的AsyncConfigurer. spring.sleuth.async.enab ...

  3. FeignClientAutoConfiguration

    2019独角兽企业重金招聘Python工程师标准>>> org.springframework.cloud.sleuth.instrument.web.client.feign.Tr ...

  4. Spring Cloud微服务系统架构的一些简单介绍和使用

    Spring Cloud 目录 特征 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变Bootstrap的位置Properties ...

  5. NullPointerException swagger

    异常信息 异常关键字 空指针 NullPointerException swagger java.lang.NullPointerException: nullat springfox.documen ...

  6. 谁说专科学历找不到Java工作?自学Java,第一份工作13k。

    现在经常会在网上看到说Java饱和了,专科找不到工作,不是科班找不到工作之类的话.作为已经成功转行的我,现在明白了一个道理: 那些顺利转行成功的,不会去网上说自己转行有多么容易: 但是那些转行不成功的 ...

  7. 临近毕业,如何系统自学Java为秋招做准备?

    秋招马上就要开始了,最后有很多同学私信问我秋招应该如何做准备? 由于学生在学校没有机会接触到实际项目,在学习方向,内容,就业的标准方向都不是很明确,现在公司招人的标准越来越高,而大学里面的内容过于基础 ...

  8. Hystrix 超时配置重写

    2019独角兽企业重金招聘Python工程师标准>>> @Configuration @ConditionalOnProperty(value = "spring.sleu ...

  9. 心跳之旅—iOS用手机摄像头检测心率(PPG)

    本文中涉及到的要点主要有: AVCapture Core Graphics Delegate & Block RGB -> HSV 带通滤波 基音标注算法(TP-Psola) 光电容积脉 ...

  10. 各行业的英语术语(绝对精华3)

    b]企业缩写词[/b] 5S管理 ABC : 作業制成本制度 (Activity-Based Costing) ABB : 實施作業制預算制度 (Activity-Based Budgeting) A ...

最新文章

  1. android studio visual studio 2015,Visual Studio Emulator for Android
  2. Linux下百度网盘一直进入不了登陆界面的解决方案
  3. 全选checkbox只能执行一次的问题
  4. JOSSO在JBOSS中安装与配置
  5. HDU 3665 Seaside
  6. android 代码添加图片不显示,Android开发 从代码里设置Drawable图片不显示的问题
  7. 让AI打工!搜狗全体员工于3月12日狗胜节放假一天
  8. jquery validate验证remote时的多状态问题
  9. 查看已有设置_腾讯企点呼叫中心如何查看企点电话产生的数据报表?
  10. 浅谈RNN、LSTM + Kreas实现及应用
  11. 第一个Vert.x程序
  12. Ruby gem 更换国内源
  13. 【Spring系列04】自动装配(Qualifier,Autowired,Resource讲解)
  14. [转载]使用Java生成带有下划线字体的文字
  15. 学无止境,笔不停耕----写博客两周年的一些感悟
  16. 苹果x电池容量_关于苹果18W PD快充你想知道的,全都在这里了
  17. ajax中xAxis的赋值
  18. resource.h文件和项目的.rc资源的关系
  19. @Repository的作用
  20. 超级计算机应用演示,香港计算机节超级计算机大演示

热门文章

  1. 服务器IP被封怎么办
  2. Q7:难道不想手工搞个环境?
  3. 英文论文写作必备网站
  4. Openbci升级版使用方法
  5. 外包公司的运作模式和赚钱之道-聊聊IT外包公司
  6. 桌面图标有蓝底怎么去掉,去掉桌面图标
  7. PXE网络启动 windows PE (使用微软官方工具)
  8. 加州大学洛杉机分校计算机科学,加州大学洛杉矶分校计算机科学
  9. RNA二级结构系列(1):基础知识篇
  10. 计算机网络中的广播是指什么,计算机网络中的广播和多播指的是什么?