将控制器创建的跟踪手动连接到侦探

时间:2018-05-28 12:13:57

标签: java spring spring-mvc spring-integration spring-cloud-sleuth

我的系统由第三方服务器组成,我向其发送POST请求,服务器在完成计算结果时发回POST请求。 我的项目由Spring Cloud Stream应用程序组成,我希望整个操作包含在一个处理器中,该处理器在发送请求和通过HTTP POST接收响应时保持相同的跟踪。

为此,我创建了一个处理器应用程序,有两个类:

@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);
    }
}

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

有更好的/有效的方法吗?

0 个答案:

没有答案