При загрузке приложения Java Spring не удалось передать информацию о трассировке zipkin в rabbitmq - PullRequest
0 голосов
/ 11 мая 2018

Я работал над приложением на основе микросервиса для электронной коммерции.Структура HTTP-запроса: внешний интерфейс -> заказ -> доставка -> rabbitmq -> мастер очереди.Транспортный контейнер получает информацию о трассировке из заказа, но не передается rabbitmq.Есть ли какая-либо конфигурация, которую я должен сделать?Я думал, что использование «spring-cloud-starter-zipkin» поможет мне справиться с этим без усилий.

(tcpdump) доставка получить запрос на отправку с информацией о трассировке: 2018-05-11 14:52:47.225204 IP 172.18.0.1.55648 > 172.18.0.8.80: Flags [P.], seq 1:320, ack 1, win 229, options [nop,nop,TS val 316382616 ecr 316382616], length 319: HTTP: POST /shipping HTTP/1.1 E..sF.@.@............`.PU5.6.f .....Y...... ........POST /shipping HTTP/1.1 Accept: application/json Content-Type: application/json X-B3-TraceId: a5a28c66a3557a66 X-B3-SpanId: 94e11436dc6c4bee X-B3-Sampled: 1 X-Span-Name: http:/shipping X-B3-ParentSpanId: 1a084fd84593e495 User-Agent: Java/1.8.0_131 Host: shipping Connection: keep-alive Content-Length: 79

доставка отправлена ​​на rabbitmqотсутствуют данные трассировки. 2018-05-11 14:52:47.228864 IP 172.18.0.8.34840 > 172.18.0.6.5672: Flags [P.], seq 3168203512:3168203740, ack 344352272, win 237, options [nop,nop,TS val 316382617 ecr 316375545], length 228 E...;.@.@..............(......f.....Y=..... ................<.(....shipping-task........g.<.........O...application/json.UTF-8...< __TypeId__S...,works.weave.socks.shipping.entities.Shipment.........O{"id":"8b92ebba-d95d-4212-af3e-6304ba5fc363","name":"57a98d98e4b00679b4a830b2"}.

РЕДАКТИРОВАНИЕ: некоторый код запроса на отправку: (отправка - это просто объект с идентификатором и именем) @ResponseStatus(HttpStatus.CREATED) @RequestMapping(value = "/shipping", method = RequestMethod.POST) public @ResponseBody Shipment postShipping(@RequestBody Shipment shipment) { System.out.println("Adding shipment to queue..."); try { rabbitTemplate.convertAndSend("shipping-task", shipment); } catch (Exception e) { System.out.println("Unable to add to queue (the queue is probably down). Accepting anyway. Don't do this " + "for real!"); } return shipment; }

1 Ответ

0 голосов
/ 11 мая 2018

OK! Теперь я вижу проблему!

Итак, вы говорите, что ваш HTTP-запрос имеет следующие заголовки трассировки: X-B3-TraceId, X-B3-SpanId, X-B3-Sampled, X-Span-Name, X-B3-ParentSpanId.

Тогда у вас есть этот код:

rabbitTemplate.convertAndSend("shipping-task", shipment);

И совершенно естественно, что ваш заголовок трассировки не передается в RabbitMQ: эти заголовки просто не отправляются.

Я считаю, что вы можете извлечь эти заголовки в этом @RequestMapping методе и заполнить их сообщением AMQP перед отправкой. Смотри org.springframework.amqp.core.MessageBuilder.

Я также считаю, что Spring Cloud Sleuth должен иметь какой-то механизм для получения этих заголовков, например Tracer.currentSpan(): http://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.0.0.RC1/single/spring-cloud-sleuth.html#_current_span

...