Skip to content
This repository was archived by the owner on Dec 5, 2023. It is now read-only.
This repository was archived by the owner on Dec 5, 2023. It is now read-only.

Can you help me with Jaeger tracing? #62

@Jacopo-Inglese

Description

@Jacopo-Inglese

Hi everybody, i am an informatic student who is trying to use jaeger to trace the interaction between the two microservices "ORDERS" and "SHIPPING" . This is the code i put in AsyncGetService inside the Order repository : i put a change in "postResource" which is the point of connection with Shipping.


@async
public <T, B> Future postResource(URI uri, B body, ParameterizedTypeReference returnType) {
Span span = tracer.buildSpan("Sono Orders").start();

	 try (Scope scope = tracer.scopeManager().activate(span)) {

         Span activeSpan = tracer.activeSpan();
  
         Tags.SPAN_KIND.set(activeSpan, Tags.SPAN_KIND_CLIENT);
         Tags.HTTP_METHOD.set(activeSpan, "POST");
         Tags.HTTP_URL.set(activeSpan, uri.toString());
         
	 RequestEntity<B> request = RequestEntity.post(uri).contentType(MediaType.APPLICATION_JSON).accept(MediaType
            .APPLICATION_JSON).body(body); 

	 TextMapAdapter adapter = new  TextMapAdapter(request.getHeaders().toSingleValueMap());
	 System.out.println("HEADERS "+request.getHeaders().toSingleValueMap().toString());

	 Tags.COMPONENT.set(activeSpan,  request.getHeaders().toSingleValueMap().toString());

    tracer.inject(activeSpan.context(), Format.Builtin.HTTP_HEADERS, adapter); //INJECTION
          
    LOG.debug("Requesting: " + request.toString());
    T responseBody = restProxyTemplate.getRestTemplate().exchange(request, returnType).getBody();
    Tags.HTTP_STATUS.set(activeSpan, responseBody.hashCode());
    
    LOG.debug("Received: " + responseBody);
    return new AsyncResult<>(responseBody);
	  }
	  finally {
          span.finish();
      }
}
}
-------------------------------------------------------------------------------

In ShippingController inside the "Shipping" repository i change the other method linked with Order , which is "postShipping" :


@ResponseStatus(HttpStatus.CREATED)
@RequestMapping(value = "/shipping", method = RequestMethod.POST)
public
@responsebody
Shipment postShipping(@RequestBody Shipment shipment, @RequestHeader Map<String, String> headers) {

	Tracer.SpanBuilder spanBuilder;   
	System.out.println("HEADERS RICEVUTI\n"+headers.toString());

	TextMapAdapter tx =  new TextMapAdapter(headers);
	 
 
	try {
           SpanContext parentSpanCtx = tracer.extract(Format.Builtin.HTTP_HEADERS, tx);
           if (parentSpanCtx == null) {
               spanBuilder = tracer.buildSpan("Span VUOTO").asChildOf(parentSpanCtx);
           } else {
               spanBuilder = tracer.buildSpan("Span FIGLIO").asChildOf(parentSpanCtx);
           }
       } catch (IllegalArgumentException e) {
           spanBuilder = tracer.buildSpan("Span sbagliato");
       }
	Span span =spanBuilder.start();
	System.out.println("Adding shipment to queue...");
    try (Scope scope = tracer.scopeManager().activate(span)) {
	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!");
    }   
    span.log(ImmutableMap.of("event", "shipment", "value",shipment ));

	return shipment;
    }
	finally {
        span.finish();
    }
 
}

The problem is that there are Async invocations and i think that for this reason in jaeger i have the 2 span separated and not a son span (from postShipping -> Shipping ) which is linked to the father one (from postResource -> Orders). I cannot use a classic RequestBuilderCarrier because my request is a RequestEntity , and i cannot use TextMapExtractAdapter/TextMapInjectAdapter. If you can help me i really thank you !

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions