Ручное соединение трассировки, созданной контроллером, с другой трассировкой в ​​Sleuth - PullRequest
0 голосов
/ 28 мая 2018

Моя система состоит из стороннего сервера, которому я отправляю запрос 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);
    }
}

Это не работает, поскольку новая трассировка создается в тот момент, когда контроллер получает запрос.Я хочу, чтобы трассировка в контроллере была такой же, как и до отправки запроса.

Есть ли лучший / рабочий подход?

...