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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions