Spring Boot и Camel- Log Route Продолжительность - PullRequest
2 голосов
/ 09 июля 2020

Я переношу приложение на использование последней версии Spring Boot. В настоящее время все маршруты верблюдов находятся в XML, и я использую этот подход.

Все маршруты в настоящее время регистрируют сообщение в конце обработки. Мне было интересно, есть ли способ определить, сколько времени потребовалось для выполнения определенного маршрута, и добавить его в сообщение журнала. Обладая этой информацией, мы можем создавать информационные панели datadog для отображения статистики по нашим верблюжьим маршрутам

Заранее спасибо, Дэмиен

1 Ответ

2 голосов
/ 09 июля 2020
public class MyLoggingSentEventNotifer extends EventNotifierSupport {

  public void notify(EventObject event) throws Exception {

    if (event instanceof ExchangeCompletedEvent) {;
      ExchangeCompletedEvent completedEvent = (ExchangeCompletedEvent) event;
      Exchange exchange = completedEvent.getExchange();
      String routeId = exchange.getFromRouteId();
      Date created = ((ExchangeCompletedEvent) event).getExchange()
                        .getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
      // calculate elapsed time
      Date now = new Date();
      long elapsed = now.getTime() - created.getTime();
      log.info("Took " + elapsed + " millis on the route : " + routeId);
    }

 }

 public boolean isEnabled(EventObject event) {
        // we only want the sent events
        return event instanceof ExchangeSentEvent;
 }

 protected void doStart() throws Exception {
        // noop
 }

 protected void doStop() throws Exception {
        // noop
 }

}

context.getManagementStrategy().addEventNotifier(new MyLoggingSentEventNotifer());

Ссылка

https://people.apache.org/~dkulp/camel/eventnotifier-to-log-details-about-all-sent-exchanges.html

Обновление

Exchange.CREATED_TIMESTAMP больше не сохраняется как свойство exchange, но вы должны использовать метод getCreated на Exchange.

...