java - 在非 Spring 应用程序中创建 traceID
问题描述
关于如何创建 traceID 的小问题,但是当应用程序不是基于 Spring 的时候。
我的应用程序是第一个,是 HTTP 调用的发起者。因此,该应用程序可以被视为客户端。
目的地,服务器,都是基于 Spring Boot Spring Cloud 的 Web 应用程序。我想强调一下,虽然服务器是基于 Spring 的,但我,客户端,我不是 Spring Boot 应用程序。
虽然我的应用程序是非 Spring 应用程序,但我确实使用 Spring Webflux WebClient 来创建对这些服务器的 HTTP 请求。需要强调的是,并不是因为我使用了 Spring Webflux WebClient,才使该应用程序成为 Spring 应用程序!
由于我是调用链的第一个,我想创建某种traceID,所以后续的服务会携带我创建的traceID。
我很困惑我尝试过的这段代码中应该包含什么:
final var response = webClient.post().uri("http://some-third-party-api.com/someroute").header("X-B3-TraceId", "How to create a traceID?").body(BodyInserters.fromValue(payload)).retrieve().bodyToMono(String.class).block();
因此,我想问一下,作为第一个 HTTP 调用发起者,使用 Spring Webflux WebClient,但是在非 Spring 应用程序中,如何创建这些 traceID 以便后续服务获得我创建的那个?
解决方案
默认情况下,Sleuth 使用 OpenZipkin 的名为Brave的跟踪库。如果您的应用程序是基于 java 的,您可以使用 Brave,如果不是,您可以在OpenZipkin org中找到其他平台的官方实现, 或者在https://zipkin.io/pages/tracers_instrumentation.html中找到官方和非官方的实现
推荐阅读
- php - 如何在不重写 CSS 和 javascript 文件的情况下从 apache .htaccess 获得重写规则?
- r - 为什么 R 忽略我的 return(paste()) 命令?
- node.js - 在使用分页的 DataMapper 查询时遇到问题
- javascript - echarts y轴不按顺序显示数组中的值
- javascript - Libretranslate Javascript 响应访问问题
- redis - 带有 Redis 关闭/断开连接的 NestJS Typeorm 缓存
- sql - INSERT 语句与 FOREIGN KEY 约束冲突 - SQL
- classification - Pycaret:使用 cross_val_predict 堆叠具有“时间序列”错误的模型
- c - 意外的答案
- java - 将行和列坐标转换为 JSON 调试器的插入符号位置