文章目录

  • TracingFilter
  • Baggage
  • 实例
    • 客户端
      • 自定义过滤器
      • 配置文件中配置
    • 服务端配置文件中配置

TracingFilter

Sleuth是通过Brave的TracingFilter达到收集Span信息的目的。

我们可以自定义Filter来对Span信息做一些自定义的修改,比如增加tag或者响应头信息。注意:自定义的Filter的优先级要比TracingFilter的低,不然无法拿到TracingFilter处理之后的信息。

Baggage

Baggage是存储在Span上下文的一组Key/Value的键值对,跟traceId和spanId不同,它不是必选项。

它相当于Sleuth暴露的一个功能接口,通过它,我们可以让自定义数据沿着调用链一直往后传递。典型的应用场景是登陆信息的传递。

实例

客户端

自定义过滤器

package com.springcloud.sleuthconsumer.filter;import brave.propagation.ExtraFieldPropagation;
import org.springframework.cloud.sleuth.instrument.web.SleuthWebProperties;
import org.springframework.cloud.sleuth.instrument.web.TraceWebServletAutoConfiguration;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.GenericFilterBean;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.regex.Pattern;/*** 自定义过滤器,* 获取当前的SessionId, 放入Baggage中* 注意, 因为不是所有的请求都需要往后传递, 所以会对一些请求跳过执行*/
@Component
@Order(TraceWebServletAutoConfiguration.TRACING_FILTER_ORDER + 1)
public class SessionFilter extends GenericFilterBean {private Pattern skipPattern = Pattern.compile(SleuthWebProperties.DEFAULT_SKIP_PATTERN);@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {throw new ServletException("Filter just supports HTTP requests");}HttpServletRequest httpRequest = (HttpServletRequest) request;boolean skip = skipPattern.matcher(httpRequest.getRequestURI()).matches();if (!skip) {// 将 SessionId 放到 Baggage 中ExtraFieldPropagation.set("SessionId", httpRequest.getSession().getId());}filterChain.doFilter(request, response);}
}

配置文件中配置

spring:application:name: sleuth-consumersleuth:baggage-keys:  # 注意, Sleuth2.0.0之后, baggage的 key 必须在这里配置才能生效- SessionId

服务端配置文件中配置

spring:application:name: sleuth-consumersleuth:baggage-keys:  # 注意, Sleuth2.0.0之后, baggage的 key 必须在这里配置才能生效- SessionId

调用ExtraFieldPropagation.get("SessionId");获取

Sleuth深入用法相关推荐

  1. java重新定义_重新定义Spring Cloud实战 PDF 下载

    资料目录: 前言 第1章 微服务与SpringCloud1 1.1 微服务架构概述1 1.1.1 应用架构的发展1 1.1.2 微服务架构3 1.1.3 微服务解决方案4 1.2 Spring Clo ...

  2. java https请求_Spring Cloud Sleuth:分布式请求链路跟踪

    Spring Cloud Sleuth 是分布式系统中跟踪服务间调用的工具,它可以直观地展示出一次请求的调用过程,本文将对其用法进行详细介绍. Spring Cloud Sleuth 简介 随着我们的 ...

  3. 五分钟学会 Spring Cloud Sleuth:分布式请求链路跟踪(小白必看,一看就会教程)

    Spring Cloud Sleuth:分布式请求链路跟踪 Spring Cloud Sleuth 简介 给服务添加请求链路跟踪 整合Zipkin获取及分析日志 使用Elasticsearch存储跟踪 ...

  4. SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现

    SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现 一.概述 分布式链路追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构的那些应用.分布式链路跟踪 ...

  5. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  6. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  7. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  8. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  9. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

最新文章

  1. matlab中怎样画出散点图,将这些散点连接成线
  2. 中国航空航天产业创新发展态势及市场规模分析报告2021-2027年版
  3. MySQL Connector/Net 5.20安装后无法在VS2008中正常使用的问题
  4. android学习笔记---36_Activity生命周期
  5. linux usb 同步传输,从设备到主机的用户模式USB等时传输
  6. IntelliJ 平台 2020 年路线图,规划原来这么厉害
  7. 和java_那些和Java的点滴
  8. 唐宇迪学习笔记2:Python数据分析处理库——pandas
  9. LeetCode题解:寻找峰值
  10. 还在到处找Linux内核的学习资料吗?你想要的都在这里
  11. ESP8266设置静态IP入网
  12. 为什么mac会卡顿,mac电脑卡顿怎么解决
  13. 智慧养老模式和智慧养老系统
  14. [机器学习]三行代码快速划分交叉训练中训练集和验证集
  15. 超市商品管理系统 c语言编程,超市商品管理系统C语言源代码
  16. 简单算法——奇因数代数和
  17. 第四章 字体和格式相关
  18. WPF-MVVM详解
  19. RPMsg:协议简介
  20. 软中断指令INT 理解

热门文章

  1. 【Unity3D日常开发】Unity3D中实现手指任意拖动物体
  2. 策略者模式解析 好理解的策略者模式
  3. nodejs/electron 解压加密zip 压缩包方法
  4. php yac缓存如何清理,yac和memcache性能对比测试
  5. [八省联考2018]林克卡特树
  6. Problem 1058 粗心的物理学家
  7. 一夫当关,15道高频手撕代码面试题整理
  8. 必会算法总结2—最小公倍数
  9. 【老九学堂】【初识C语言】二维数组
  10. 计算机SCI论文重复率高,有什么降重技巧? - 易智编译EaseEditing