sleuth feign instrument 分析
总体
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 分析相关推荐
- feignclient url_对Feign的请求url 重写
需求:对当前请求的 url 重新构建 debug feign 的执行可知,重写 LoadBalancerFeignClient 类中的 execute 方法即可控制当前请求的url 代码分析 当引入 ...
- Spring Cloud Sleuth 配置说明
名称 默认值 说明 spring.sleuth.async.configurer.enabled true 启用默认的AsyncConfigurer. spring.sleuth.async.enab ...
- FeignClientAutoConfiguration
2019独角兽企业重金招聘Python工程师标准>>> org.springframework.cloud.sleuth.instrument.web.client.feign.Tr ...
- Spring Cloud微服务系统架构的一些简单介绍和使用
Spring Cloud 目录 特征 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变Bootstrap的位置Properties ...
- NullPointerException swagger
异常信息 异常关键字 空指针 NullPointerException swagger java.lang.NullPointerException: nullat springfox.documen ...
- 谁说专科学历找不到Java工作?自学Java,第一份工作13k。
现在经常会在网上看到说Java饱和了,专科找不到工作,不是科班找不到工作之类的话.作为已经成功转行的我,现在明白了一个道理: 那些顺利转行成功的,不会去网上说自己转行有多么容易: 但是那些转行不成功的 ...
- 临近毕业,如何系统自学Java为秋招做准备?
秋招马上就要开始了,最后有很多同学私信问我秋招应该如何做准备? 由于学生在学校没有机会接触到实际项目,在学习方向,内容,就业的标准方向都不是很明确,现在公司招人的标准越来越高,而大学里面的内容过于基础 ...
- Hystrix 超时配置重写
2019独角兽企业重金招聘Python工程师标准>>> @Configuration @ConditionalOnProperty(value = "spring.sleu ...
- 心跳之旅—iOS用手机摄像头检测心率(PPG)
本文中涉及到的要点主要有: AVCapture Core Graphics Delegate & Block RGB -> HSV 带通滤波 基音标注算法(TP-Psola) 光电容积脉 ...
- 各行业的英语术语(绝对精华3)
b]企业缩写词[/b] 5S管理 ABC : 作業制成本制度 (Activity-Based Costing) ABB : 實施作業制預算制度 (Activity-Based Budgeting) A ...
最新文章
- android studio visual studio 2015,Visual Studio Emulator for Android
- Linux下百度网盘一直进入不了登陆界面的解决方案
- 全选checkbox只能执行一次的问题
- JOSSO在JBOSS中安装与配置
- HDU 3665 Seaside
- android 代码添加图片不显示,Android开发 从代码里设置Drawable图片不显示的问题
- 让AI打工!搜狗全体员工于3月12日狗胜节放假一天
- jquery validate验证remote时的多状态问题
- 查看已有设置_腾讯企点呼叫中心如何查看企点电话产生的数据报表?
- 浅谈RNN、LSTM + Kreas实现及应用
- 第一个Vert.x程序
- Ruby gem 更换国内源
- 【Spring系列04】自动装配(Qualifier,Autowired,Resource讲解)
- [转载]使用Java生成带有下划线字体的文字
- 学无止境,笔不停耕----写博客两周年的一些感悟
- 苹果x电池容量_关于苹果18W PD快充你想知道的,全都在这里了
- ajax中xAxis的赋值
- resource.h文件和项目的.rc资源的关系
- @Repository的作用
- 超级计算机应用演示,香港计算机节超级计算机大演示