我的系统由第三方服务器组成,我向其发送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);
}
}
这不起作用,因为在控制器收到请求时会创建新跟踪。我希望控制器中的跟踪与发送请求之前的跟踪相同。
有更好的/有效的方法吗?