Статьи

Изучение Apache Camel Core — компонент журнала

Есть много способов регистрировать и проверять сообщения, проходящие через вашего верблюда  Routecamel-core Поставляется с  log компонентом , который позволит вам проверить сообщение. Таким образом, вместо того, чтобы писать отдельное, Processor чтобы просто записать  строку как обработанную, попробуйте использовать это:

from("timer://timer1?period=1s")
.to("log:demo")

По умолчанию  log компонент будет записывать содержимое вашего сообщения через имя вашего регистратора,  demo в вышеупомянутом случае, на уровне INFO. Поскольку вы можете дать любое имя, вы можете контролировать УРОВЕНЬ ведения журнала в любом случае с помощью реализации регистратора Camel  SLF4J .

Чтобы записать сообщение на уровне DEBUG, попробуйте это

from("timer://timer1?period=1s")
.to("log:demo?level=DEBUG")

Теперь, если вы используете  log4j реализацию логгера, убедитесь, что добавили конфигурацию логгера следующим образом.

log4j.logger.demo = DEBUG
log4j.logger.org.apache.camel = INFO

Сообщение Camel также может иметь свойства и заголовки, поэтому для их отображения вы можете добавить showAll=true.

Когда вы обрабатываете сообщения, которые имеют большой основной текст, может быть более практичным просто отобразить определенное количество символов. Для этого добавьте  maxChars=256 в URL.

Как измерить пропускную способность сообщений Camel

Одна из скрытых жемчужин компонента  log — его способность регистрировать пропускную способность сообщений! Вы можете указать определенную группу сообщений, которые будут регистрироваться, и как только она достигнет этого значения, она напечатает вывод скорости сообщения в секунду. Чтобы включить это, просто добавьте  groupSize опцию к URL.

Чтобы продемонстрировать это, я создам  SampleGenerator процессор EJB, который будет заполнять  Route примеры сообщений. Я буду использовать реестр контекста Camel для привязки bean-компонента и ссылки на него в  Route. Вот демонстрационный код.

package camelcoredemo;

import org.slf4j.*;
import org.apache.camel.*;
import org.apache.camel.builder.*;
import org.apache.camel.main.Main;

public class LogDemoCamel extends Main {
    static Logger LOG = LoggerFactory.getLogger(LogDemoCamel.class);
    public static void main(String[] args) throws Exception {
        LogDemoCamel main = new LogDemoCamel();
        main.enableHangupSupport();
        main.addRouteBuilder(createRouteBuilder());
        main.bind("sampleGenerator", new SampleGenerator());
        main.run(args);
    }
    static RouteBuilder createRouteBuilder() {
        return new RouteBuilder() {
            public void configure() {
                from("bean:sampleGenerator")
                .to("log://demo?groupSize=100");
            }
        };
    }
    static class SampleGenerator implements Processor{
        int count = 0;
        public void process(Exchange msg) throws Exception {
            if (count >= 500){
                LOG.info("Max count has reached. Do nothing.");
                Thread.sleep(Long.MAX_VALUE);
                return;
            }

            // Let's generate sample message.
            count++;
            LOG.trace("Generating sample msg #{}", count);
            msg.getOut().setBody("Sample msg");
        }
    }
}

Теперь вы можете скомпилировать и запустить эту демонстрацию.

mvn compile exec:java -Dexec.mainClass=camelcoredemo.LogDemoCamel

Запустив эту демонстрацию, вы заметите, что скорость будет отображаться на консоли и как быстро вы можете качать сообщение  Route и обрабатывать его. Это очень полезная функция, которая поможет вам измерить и быстро оценить ваши  Routeвозможности.

В  компоненте « Журнал» доступны дополнительные параметры,  которые вы можете изучить. Попробуйте это с маршрутом  и убедитесь сами.