Java Springboot-使用camel tracer创建自己的Opentracing范围

Java Springboot-使用camel tracer创建自己的Opentracing范围,java,apache-camel,opentracing,jaeger,Java,Apache Camel,Opentracing,Jaeger,我已将以下注释添加到我的Spring Boot项目中: @CamelOpenTracing 这为我的信息所经过的每一条路线都创造了一个跨度,而且效果非常好 但是,如何创建自己的跨度?我想为我的消息转到onException(添加使错误标记为true)时添加一个范围 我尝试从camelContext获取跟踪程序并创建一个span,但未成功。您可以在camel进程中添加一个span,如下所示: from("queue:" + properties.getJmsEndpoint())

我已将以下注释添加到我的Spring Boot项目中:

@CamelOpenTracing

这为我的信息所经过的每一条路线都创造了一个跨度,而且效果非常好

但是,如何创建自己的跨度?我想为我的消息转到
onException
(添加使错误标记为true)时添加一个范围


我尝试从camelContext获取跟踪程序并创建一个span,但未成功。

您可以在camel进程中添加一个span,如下所示:

 from("queue:" + properties.getJmsEndpoint())
        .routeId("Jms-To-Ftp-" + properties.getFlowName())

        .setHeader(MessageHeaders.SENDER_ID, simple(properties.getApplication()))
            .process(exchange -> {
              //save original body for DLQ route
              String originalBody = exchange.getIn().getBody(String.class);
              exchange.setProperty(MessageProperties.BACKUP_MESSAGE, originalBody);


              Span span = tracer.buildSpan("JmsMessage route").start();
              span.setTag("sender", properties.getApplication());
              span.setTag(MessageHeaders.DOCUMENT_ID, exchange.getIn().getHeader(MessageHeaders.DOCUMENT_ID).toString());
              span.setTag(MessageHeaders.PROCESS_TYPE_NAME, exchange.getIn().getHeader(MessageHeaders.PROCESS_TYPE_NAME).toString());

              span.log(ImmutableMap.of("file", originalBody));
              span.finish();

            })
       .to("queue:" + properties.getReceiver())

下面是我如何使用Camel 3.7.0实现的,但是我已经晚了2年才回答这个问题,所以我希望这对某人有所帮助,如果有更好的方法,请发布

我的目标是创建现有span的子span,这与OpenTracing示例完全不同,因为Camel似乎有自己的方式来访问活动span

步骤1:从Camel上下文获取跟踪程序

Set<Tracer> tracers = exchange.getContext().getRegistry().findByType(Tracer.class);

// There should only be one Tracer
Tracer camelTracer = null;
for (Tracer tracer : tracers) {
    camelTracer = tracer;
}
步骤3:创建子跨度

Span childSpan = camelTracer.buildSpan("operation name").asChildOf(activeSpan).start();

childSpan.log(ImmutableMap.of("thing", thing));
childSpan.setTag("error", true);

childSpan.finish();

你好,凯文。我认为开箱即用并不容易。我建议为该功能记录JIRA记录,然后提供一些描述和建议,说明您希望如何将自定义跨度添加到camel-opentracing中。您的答案有效。是否可以将标签或行李添加到现有的span中?这是哪个包..OpenTracingSpanAdapter..在使用camel 2.23.2时,我看不到这一点
Span childSpan = camelTracer.buildSpan("operation name").asChildOf(activeSpan).start();

childSpan.log(ImmutableMap.of("thing", thing));
childSpan.setTag("error", true);

childSpan.finish();