我在我的 Spring Boot 项目中添加了以下注释:
@CamelOpenTracing
这为我的消息通过的每条路线创建了一个跨度,并且效果很好。
但是,如何创建自己的跨度?我想为我的消息到达时添加一个跨度onException
(添加使错误标记为真)。
我尝试从 中获取跟踪器camelContext
并创建一个跨度,但没有成功。
我在我的 Spring Boot 项目中添加了以下注释:
@CamelOpenTracing
这为我的消息通过的每条路线创建了一个跨度,并且效果很好。
但是,如何创建自己的跨度?我想为我的消息到达时添加一个跨度onException
(添加使错误标记为真)。
我尝试从 中获取跟踪器camelContext
并创建一个跨度,但没有成功。
您可以像这样在骆驼进程中添加跨度:
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 年,所以我希望这对某人有所帮助,如果有更好的方法请发布。
我的目标是创建现有跨度的子跨度,这与 OpenTracing 示例绝对不同,因为 Camel 似乎有自己的方式来访问活动跨度。
第 1 步:从 Camel 上下文中获取 Tracer
Set<Tracer> tracers = exchange.getContext().getRegistry().findByType(Tracer.class);
// There should only be one Tracer
Tracer camelTracer = null;
for (Tracer tracer : tracers) {
camelTracer = tracer;
}
第 2 步:从 Camel 获取活动跨度
OpenTracingSpanAdapter adapter = (OpenTracingSpanAdapter) ActiveSpanManager.getSpan(exchange);
Span activeSpan = adapter.getOpenTracingSpan();
第 3 步:创建子跨度
Span childSpan = camelTracer.buildSpan("operation name").asChildOf(activeSpan).start();
childSpan.log(ImmutableMap.of("thing", thing));
childSpan.setTag("error", true);
childSpan.finish();