Spring Cloud Alibaba Gateway 全链路跟踪TraceId日志

前言
凡是文中需要注册到nacos的都需要这个jar包

 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

凡是使用config jar包的都需要写bootstrap.properties

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
  • 在注册中心注册

        spring.cloud.nacos.discovery.server-addr=192.168.14.58:8848
    
  • 配置注册中心的地址

        spring.cloud.nacos.config.server-addr=192.168.14.58:8848
    

文章目录

  • Spring Cloud Alibaba Gateway 全链路跟踪TraceId日志
    • 1.filter包中直接编码
    • 2.使用openFeign转发
      • 2.1 配置TraceId 过滤器
    • 3.调用nacos中的接口

Spring Cloud Alibaba Gateway 全链路跟踪TraceId日志

1.filter包中直接编码

方式和token类似
在这里插入图片描述

@Component
@Slf4j
public class TraceFilter implements GlobalFilter, Ordered {private static final String TRACEID = "traceid";@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();List<String> traceIds = request.getHeaders().get(TRACEID);String traceid = "";if(ObjectUtil.isEmpty(traceIds)){traceid = IdUtil.fastSimpleUUID();log.debug("没有traceId,生成一个{}",traceid);ServerHttpRequest traceid1 = request.mutate().header(TRACEID, traceid).build();ServerWebExchange exchange1 = exchange.mutate().request(traceid1).build();chain.filter(exchange1);return chain.filter(exchange1);}log.debug("traceId,已经存在{}",traceIds.get(0));return chain.filter(exchange);}@Overridepublic int getOrder() {return 2;}
}

配置文件这里配置了多个路由 ,测试用的是 route[2]可以只写一个
但是一定要加入

token.key=by123
spring.application.name=gateway-app
spring.cloud.nacos.discovery.ip=192.168.14.53
logging.level.com.hb=debug
logging.level.root=error# 配置路由
spring.cloud.gateway.routes[0].id = test
#这是显示请求详情的网址,同时也是本次被路由到的url
spring.cloud.gateway.routes[0].uri = http://httpbin.org
#配置断言 也就是本次可以被路由出的地址必须在test域名下
spring.cloud.gateway.routes[0].predicates[0] = Path=/test/**
# 配置截取二级目录 也就是  截取 http://httpbin.org/test/** 截取成为 http://httpbin.org/**
spring.cloud.gateway.routes[0].filters[0] = StripPrefix=1
#添加过滤请求时  请求头中添加一个参数
spring.cloud.gateway.routes[0].filters[1] = AddRequestParameter=aa,blue
#请求头中添加参数
spring.cloud.gateway.routes[0].filters[2] = AddRequestHeader=lianxu,shuai
#添加一个返回头
spring.cloud.gateway.routes[0].filters[3] = AddResponseHeader=kuailong,shuaidaile
spring.cloud.gateway.routes[0].filters[4] = LogTime=50
spring.cloud.gateway.routes[0].filters[5] = LogTime2=ms,50#配置中心注册服务
spring.cloud.nacos.discovery.server-addr=192.168.14.58:8848spring.cloud.gateway.routes[1].id = nacos-a
#这是显示请求详情的网址,同时也是本次被路由到的url
spring.cloud.gateway.routes[1].uri = lb://nacos-a
#配置断言 也就是本次可以被路由出的地址必须在test域名下
spring.cloud.gateway.routes[1].predicates[0] = Path=/nacosa/**
# 配置截取二级目录 也就是  截取 http://httpbin.org/test/** 截取成为 http://httpbin.org/**
spring.cloud.gateway.routes[1].filters[0] = StripPrefix=1
spring.cloud.gateway.routes[1].filters[1] = LogTime=50spring.cloud.nacos.discovery.register-enabled=true
#路由
spring.cloud.gateway.routes[2].id=openfeign-app
spring.cloud.gateway.routes[2].uri = lb://openfeign-app
spring.cloud.gateway.routes[2].predicates[0] = Path=/openfeign/**
spring.cloud.gateway.routes[2].filters[0] = StripPrefix=1
spring.cloud.gateway.routes[2].filters[1] = LogTime=50

结果
在这里插入图片描述

2.使用openFeign转发

2.1 配置TraceId 过滤器

依赖
需要将服务注册道nacos中

      <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.18</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

过滤器

@WebFilter
@Slf4j
public class TraceFilter implements Filter {public static String TRACEID = "traceId";@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;String traceId = httpServletRequest.getHeader(TRACEID);if(ObjectUtil.isNotEmpty(traceId)){MDC.put(TRACEID,traceId);}log.info("岁在甲子,天下大吉{}",traceId);filterChain.doFilter(servletRequest, servletResponse);}
}

主类配置
在这里插入图片描述
配置文件


#配置name
spring.application.name=openfeign-app
server.port = 3030
#Nacos服务发现注册中心
spring.cloud.nacos.discovery.server-addr=192.168.14.58:8848
spring.cloud.nacos.discovery.register-enabled=true
logging.level.com.hb = debug
##日志输出格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(%-5level) %clr([%X{traceId}]) %clr(${PID:-}) --- %clr(%logger{50}) - %m%n

配置这个才能看到追踪的id

##日志输出格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(%-5level) %clr([%X{traceId}]) %clr(${PID:-}) — %clr(%logger{50}) - %m%n

接口

@RestController
public class TestController {@AutowiredOrderClients orderClients;@GetMapping("/port")public String feignAClient(){String port = orderClients.port();return  port;}@GetMapping("/sleep")public String sleep(@RequestParam("s") Integer s){String order = orderClients.sleep(s);return  order;}}

调用服务为nacos-a的方法

@FeignClient("nacos-a")
public interface OrderClients {@GetMapping("/port")String port();@GetMapping("/sleep")String sleep(@RequestParam("second") Integer second);
}

3.调用nacos中的接口

有必要说明一下这里只是接口刚好在当初配置的nacos里面,所以这里调用(我理解还不够深刻,先记着)

配置一定要加上

@Configuration
public class RestConfig {@Bean@LoadBalanced//注意:如果使用服务注册中心,需要添加@LoadBalanced注解//加上该注解之后,RestTemplate会把请求的一级目录改为服务名,去服务注册中心抓取对应的ip,然后再去调用对应的接口数据public RestTemplate restTemplate() {return new RestTemplate();}
}

nacos-a 也需要将服务注册在其中(因为到这里线程就换啦,所以存储在threadlocal(MDC)线程中的traceId也就不存在)需要重新放入

@WebFilter
@Slf4j
public class TraceFilter implements Filter {public static String TRACEID = "traceId";@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;String traceId = httpServletRequest.getHeader(TRACEID);if(ObjectUtil.isNotEmpty(traceId)){MDC.put(TRACEID,traceId);}log.info("岁在甲子,天下大吉{}",traceId);filterChain.doFilter(servletRequest, servletResponse);}
}

controller

   @GetMapping("/port")public String port(){log.info("gagaga");return port + "aaa";}

运行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipad触控笔有必要买原装吗?ipad2023手写笔推荐

目前&#xff0c;在无纸教学、无纸办公的大背景下&#xff0c;电容笔得到了广泛的关注。只是&#xff0c;对于这两支电容笔的不同之处&#xff0c;不少人并不是很清楚。其实这两种电容笔都很好区分&#xff0c;第一种是主动电容笔&#xff0c;也就是我们常用的电容式屏幕&#…

[JAVAee]Spring MVC

目录 Spring MVC框架 MVC Spring MVC的功能 用户与程序的连接 RequestMapping 指定为Get请求 指定为Post请求 获取参数 单个参数 表单传递多个参数 传递对象 后端参数重命名(后端参数映射) 设置参数必传/非必传 获取JSON对象 获取URL中的参数 上传文件 获取…

十六、MySql的MVCC机制CONNECT(收官!)

文章目录 一、数据库并发的场景有三种&#xff1a;二、读-写&#xff08;一&#xff09;3个记录隐藏列字段&#xff08;二&#xff09;undo 日志&#xff08;三&#xff09;模拟 MVCC&#xff08;四&#xff09;一些思考&#xff08;五&#xff09;Read View 一、数据库并发的场…

【深度学习】Pytorch 系列教程(十二):PyTorch数据结构:4、数据集(Dataset)

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量&#xff08;Tensor&#xff09; 2、张量操作&#xff08;Tensor Operations&#xff09; 3、变量&#xff08;Variable&#xff09; 4、数据集&#xff08;Dataset&#xff09; 随机洗牌 一、前言 Ch…

FPGA——WS2812B彩灯点亮

文章目录 前言一、WS2812B手册分析原理1.1 主要特点1.2 器件图1.3 接口1.4 输入码型1.5 归零码&#xff08;RZ&#xff09;和非归零码(NRZ)&#xff08;拓展&#xff09;1.6 级联输出1.7 输入数据格式 二、FPGA点亮彩灯2.1 代码 三、总结 前言 本篇博客是记录WS2812手册的学习…

web二级操作题

js和css的引入 在 HTML 中&#xff0c;你可以使用 <script> 和 <link> 标签来引入外部的 JavaScript 文件和 CSS 文件。 引入外部的 JavaScript 文件&#xff1a; <script src"path/to/script.js"></script>src 属性指定了 JavaScript 文…

分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-GRU-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-GRU-Attention数据分类预测&#xff0c;运行环境Matlab2021b及以上&…

创建表

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 创建表 语法格式: create table 表名(列名1 数据类型,列名2 数据类型,... ,列名n, 数据类型 ); 练习:在czwbkl库中,创建一格test01表 跟大家说…

2、RocketMQ消息的分类

一、普通消息 1 消息发送分类 Producer对于消息的发送方式也有多种选择&#xff0c;不同的方式会产生不同的系统效果。 同步发送消息 同步发送消息是指&#xff0c;Producer发出⼀条消息后&#xff0c;会在收到MQ返回的ACK之后才发下⼀条消息。该方式的消息可靠性最高&#xff…

Python之列表

标题 列表什么是列表列表的创建列表的删除列表的访问 列表的常用方法append()、insert()、extend()pop()、remove()、clear()count()、index()list()、 filter()、 reduce()、lambda() 列表支持的运算加法运算符乘法运算符*成员测试运算符in 内置函数对列表的操作列表推导式列表…

在Idea中调试本地Docker

报错&#xff1a; Error running myApp: Unable to open debugger port (localhost:5005): java.net.SocketException "Connection reset" 原因&#xff1a; Docker配置里边没有配置环境变量JAVA_TOOL_OPTIONS. 解决&#xff1a; 在Docker下加入运行时的环境变量JAVA…

ffmpeg抠图

1.不用png&#xff0c;用AVFrame 2.合流 3.图片抠图透明 (1.)mp4扣yuv图&#xff0c;(2)用1.把一张yuv标记为透明然后av_hwframe_transfer_data到GPU (3)用抠图算法函数对yuv进行处理 (4) qsv的h264_qsv只支持nv12和qsv&#xff0c;但qsv本身并不限制像素格式&#xff0c;比如在…

Centos7原生hadoop环境,搭建Impala集群和负载均衡配置

Centos7原生hadoop环境&#xff0c;搭建Impala集群和负载均衡配置 impala介绍 Impala集群包含一个Catalog Server (Catalogd)、一个Statestore Server (Statestored) 和若干个Impala Daemon (Impalad)。Catalogd主要负责元数据的获取和DDL的执行&#xff0c;Statestored主要负…

VSCode远程连接服务器报错:Could not establish connection to

参考&#xff1a;https://blog.csdn.net/weixin_42538848/article/details/118113262 https://www.jb51.net/article/219138.htm 刚开始把ssh文件夹中的known_hosts给删除了&#xff0c;发现没啥用。 之后在扩展Remote-SSH里面&#xff0c;把config file路径设置为ssh文件夹里…

洛谷刷题入门篇:分支结构

今天又来了&#xff0c;刷题刷题&#xff0c;我爱刷题&#xff0c;题单链接如下&#xff1a; https://www.luogu.com.cn/training/101#problems 一、【深基1-2】小学数学 N 合一 题目如下&#xff1a;https://www.luogu.com.cn/problem/P2433 题目描述 问题 1 请输出 I lov…

【03】FISCOBCOS配置及使用控制台

官网文档https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.html# 配置及使用控制台 第一步. 准备依赖 安装java &#xff08;推荐使用java 14&#xff09; # ubuntu系统安装java sudo apt install -y default-jdk#centos系统安装java sudo yu…

uni-app实现获取未来七天时间和星期几功能

例子如下&#xff1a; HTML&#xff1a; <viewstyle"margin-top: 3%;width: 100%;height: 10vh;display: flex;justify-content: space-around;"><div v-for"(item,index) in same_week" :class"[same_dayitem.date? activ :,dis]"cl…

关于CS 4.7 Stager 逆向及 Shellcode 重写

1. 概述 一直很想有一个自己的控&#xff0c;奈何实力不允许&#xff0c;CS 仍然是目前市面上最好用的控&#xff0c;但是也被各大厂商盯得很紧&#xff0c;通过加载器的方式进行免杀效果有限&#xff0c;后来看到有人用 go 重写了 CS 的 beacon&#xff0c;感觉这个思路很好&…

LVS-NAT模式

LVS负载均衡群集 群集的定义 Cluster&#xff0c;集群&#xff08;也称群集&#xff09;由多台主机构成&#xff0c;但对外只表现为一一个整体&#xff0c;只提供一-个访问入口(域名或IP地址)&#xff0c; 相当于一台大型计算机。 群集的作用 对于企业服务的的性能提升一般…

测试网页调用本地可执行程序(续:带参数调用)

前篇文章介绍了网页调用本地可执行程序的方式&#xff0c;通过在注册表中注册命令&#xff0c;然后在网页中调用命令启动本地程序。如果需要传递参数&#xff0c;则需要在注册表命令中的command项中设置如下形式的值。 "XXXXXX\XXXXXXX.exe" "%1"&emsp…