Моя система состоит из стороннего сервера, которому я отправляю запрос POST, и сервер отправляет обратно запрос POST, когда он заканчивает вычисление результата.Мой проект состоит из приложений Spring Cloud Stream, и я хочу, чтобы вся эта операция содержалась в одном процессоре, который поддерживает ту же трассировку при отправке запроса и при получении ответа через HTTP POST.
Для этого ясоздал приложение Processor с двумя классами:
@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);
}
}
Это не работает, поскольку новая трассировка создается в тот момент, когда контроллер получает запрос.Я хочу, чтобы трассировка в контроллере была такой же, как и до отправки запроса.
Есть ли лучший / рабочий подход?