Sleuth深入用法
文章目录
- 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深入用法相关推荐
- 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 ...
- java https请求_Spring Cloud Sleuth:分布式请求链路跟踪
Spring Cloud Sleuth 是分布式系统中跟踪服务间调用的工具,它可以直观地展示出一次请求的调用过程,本文将对其用法进行详细介绍. Spring Cloud Sleuth 简介 随着我们的 ...
- 五分钟学会 Spring Cloud Sleuth:分布式请求链路跟踪(小白必看,一看就会教程)
Spring Cloud Sleuth:分布式请求链路跟踪 Spring Cloud Sleuth 简介 给服务添加请求链路跟踪 整合Zipkin获取及分析日志 使用Elasticsearch存储跟踪 ...
- SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现
SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现 一.概述 分布式链路追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构的那些应用.分布式链路跟踪 ...
- c语言中external,static关键字用法
static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...
- Pandas_transform的用法
先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...
- Python中yield和yield from的用法
yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...
- pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...
- python yield 和 yield from用法总结
#例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...
最新文章
- matlab中怎样画出散点图,将这些散点连接成线
- 中国航空航天产业创新发展态势及市场规模分析报告2021-2027年版
- MySQL Connector/Net 5.20安装后无法在VS2008中正常使用的问题
- android学习笔记---36_Activity生命周期
- linux usb 同步传输,从设备到主机的用户模式USB等时传输
- IntelliJ 平台 2020 年路线图,规划原来这么厉害
- 和java_那些和Java的点滴
- 唐宇迪学习笔记2:Python数据分析处理库——pandas
- LeetCode题解:寻找峰值
- 还在到处找Linux内核的学习资料吗?你想要的都在这里
- ESP8266设置静态IP入网
- 为什么mac会卡顿,mac电脑卡顿怎么解决
- 智慧养老模式和智慧养老系统
- [机器学习]三行代码快速划分交叉训练中训练集和验证集
- 超市商品管理系统 c语言编程,超市商品管理系统C语言源代码
- 简单算法——奇因数代数和
- 第四章 字体和格式相关
- WPF-MVVM详解
- RPMsg:协议简介
- 软中断指令INT 理解