我在Spring Boot项目中添加了以下注释:
@CamelOpenTracing
这会为我的邮件通过的每条路线创建一个范围,并且效果很好。
但是,如何创建自己的跨度?我想为邮件发送到onException
时添加跨度(添加make error标签为true)。
我尝试从camelContext
获取示踪剂并创建跨度失败。
答案 0 :(得分:1)
您可以像这样在骆驼过程中添加跨度:
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())
答案 1 :(得分:0)
这是我使用 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();