@Override protected void doNotify(ExchangeSendingEvent event) throws Exception { String endpointUri = event.getEndpoint().getEndpointUri(); if (filter(endpointUri, endpointFilterPattern)) { Message msg = event.getExchange().getIn().getHeader(AsynchConstants.MSG_HEADER, Message.class); // create request String reqBody = ((Exchange) event.getSource()).getIn().getBody(String.class); String joinId = createResponseJoinId(event.getExchange()); Request req = Request.createRequest(endpointUri, joinId, reqBody, msg); try { // save request requestResponseService.insertRequest(req); // add to exchange for later use when response arrives event.getExchange().getIn().setHeader(SAVE_REQ_HEADER, req); } catch (Exception ex) { LOG.error("Request didn't saved.", ex); } } }
@Override public void notify(EventObject event) throws Exception { // use event notifier to track events when Camel messages to endpoints // these events corresponds to Zipkin client events // client events if (event instanceof ExchangeSendingEvent) { ExchangeSendingEvent ese = (ExchangeSendingEvent) event; String serviceName = getServiceName(ese.getExchange(), ese.getEndpoint(), false, true); Tracing brave = getTracing(serviceName); if (brave != null) { clientRequest(brave, serviceName, ese); } } else if (event instanceof ExchangeSentEvent) { ExchangeSentEvent ese = (ExchangeSentEvent) event; String serviceName = getServiceName(ese.getExchange(), ese.getEndpoint(), false, true); Tracing brave = getTracing(serviceName); if (brave != null) { clientResponse(brave, serviceName, ese); } } }
private void clientRequest(Tracing brave, String serviceName, ExchangeSendingEvent event) { ZipkinState state = event.getExchange().getProperty(ZipkinState.KEY, ZipkinState.class); if (state == null) { state = new ZipkinState(); event.getExchange().setProperty(ZipkinState.KEY, state); INJECTOR.inject(span.context(), event.getExchange().getIn()); parser.onRequest(event.getExchange(), span.customizer());
ExchangeSendingEvent ese = (ExchangeSendingEvent)event; SpanDecorator sd = getSpanDecorator(ese.getEndpoint()); if (!sd.newSpan() || isExcluded(ese.getExchange(), ese.getEndpoint())) { return; Span parent = ActiveSpanManager.getSpan(ese.getExchange()); SpanBuilder spanBuilder = tracer.buildSpan(sd.getOperationName(ese.getExchange(), ese.getEndpoint())).withTag(Tags.SPAN_KIND.getKey(), sd.getInitiatorSpanKind()); sd.pre(span, ese.getExchange(), ese.getEndpoint()); tracer.inject(span.context(), Format.Builtin.TEXT_MAP, sd.getInjectAdapter(ese.getExchange().getIn().getHeaders(), encoding)); ActiveSpanManager.activate(ese.getExchange(), span);