首页 > 解决方案 > 手动将控制器创建的跟踪连接到 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);
    }
}

这不起作用,因为新跟踪是在控制器收到请求时创建的。我希望控制器中的跟踪与发送请求之前相同。

有没有更好/可行的方法?

标签: javaspringspring-mvcspring-integrationspring-cloud-sleuth

解决方案


推荐阅读