java - 手动将控制器创建的跟踪连接到 Sleuth 中的不同跟踪
问题描述
我的系统由一个 3rd 方服务器组成,我向它发送一个 POST 请求,服务器在完成计算结果后发回一个 POST 请求。我的项目由 Spring Cloud Stream 应用程序组成,我希望整个操作包含在单个处理器中,该处理器在发送请求和通过 HTTP POST 接收响应时保持相同的跟踪。
为此,我创建了一个处理器应用程序,其中包含 2 个类:
@EnableBinding(Processor.class)
public class Client{
...
@StreamListener(Processor.INPUT)
public void sendToServer(Message<String> message){
//also sends the traceId
restTemplate.postForEntity(http://server-url,message.getPayload(),String.class);
}
}
二等:
@EnableBinding(Processor.class)
@RestController
public class ResponseHandler{
@RequestMapping("/{traceId}"), method=Request.POST)
public void forwardResult(@RequestBody String body, @PathVariable("traceId") String traceId){
long traceId = Long.parseLong(traceId);
Message<String< message= MessageBuilder.withPayload(body).setHeader("spanTraceId",traceId).build();
processor.output().send(message);
}
}
这不起作用,因为新跟踪是在控制器收到请求时创建的。我希望控制器中的跟踪与发送请求之前相同。
有没有更好/可行的方法?
解决方案
推荐阅读
- angular - 提交表单时表单验证不起作用
- node.js - 猫鼬聚合不起作用,尝试了不同的方法仍然无法解决问题,甚至不知道是什么问题
- html - Xpath 仅获取第一个文本标记并忽略它之前的中断标记
- python - 在 Tkinter 中实例化后,如何使用来自另一个帧的命令进行配置?
- ajax - Angular 中的同步 Ajax 调用
- junit - 将 AssertNotSame 转换为 AssertThat
- c# - IoT Edge 模块 - 远程调试 python 模块问题
- .net - 是否有使用 Directory.Build.Props 从 csproj 项目中引用 sqlproj 项目的正确方法?
- java - 数据集
将其传递给基于 MapFunction 接口的类 Java Spark 时为 null - opc-ua - 创建文件夹或对象有什么区别?