Springboot - Создайте собственный диапазон Opentracing с помощью Camel Tracer

Я добавил следующую аннотацию в свой проект Spring Boot:

@CamelOpenTracing

Это создает промежуток для каждого маршрута, по которому проходят мои сообщения, и работает идеально.

Однако как мне создать свой собственный диапазон? Я хочу добавить промежуток времени, когда мои сообщения отправляются на onException (добавить тег ошибки make true).

Я безуспешно пытался получить трассировщик из camelContext и создать промежуток.


person Kelvin piroddi    schedule 08.07.2019    source источник
comment
Привет, Кевин. Я не думаю, что это просто из коробки. Я предлагаю зарегистрировать заявку JIRA для этой функции, а затем дать некоторое описание с предложениями о том, как вы хотели бы добавить настраиваемый диапазон для верблюжьего отслеживания.   -  person Claus Ibsen    schedule 10.07.2019


Ответы (2)


Вы можете добавить промежутки внутри процесса верблюда следующим образом:

 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())
person Ayoub Nejmeddine    schedule 06.09.2019
comment
Ваш ответ работает. Можно ли добавить теги или багаж к существующему диапазону? - person Hari R; 18.09.2019

Вот как я сделал это с помощью Camel 3.7.0, но я опаздываю на 2 года с вопросом, поэтому я надеюсь, что это кому-то поможет, и если есть лучший способ, напишите.

Моей целью было создать дочерний диапазон существующего диапазона, и это определенно отличается от примеров OpenTracing, поскольку у Camel, похоже, есть собственный способ доступа к активному диапазону.

Шаг 1: получите Tracer из контекста 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;
}

Шаг 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();
person qkerby    schedule 05.03.2021
comment
в каком пакете это..OpenTracingSpanAdapter .. Я не вижу этого при использовании camel 2.23.2 - person user1587439; 04.05.2021