log4j JMSAppender и ActiveMQ в качестве конечных точек Camel - PullRequest
0 голосов
/ 31 января 2012

Я хочу подключить log4j JMSAppender к очереди ActiveMQ через Apache Camel, чтобы обе они были конечными точками на маршруте.Кроме того, я хотел бы, чтобы вся конфигурация была выполнена на Java (не XML).

В log4j javadoc здесь и этот вопрос SO оба показывают отличные примерыкак установить такое соединение sans Camel (через JNDI), но они не совсем то, что я ищу.

Я знаю, что это возможно с помощью компонента activemq-camel Camel,и на самом деле на странице учебника компонента показано, как настроить фабрику пулов соединений для URL-адреса посредника.К сожалению (для меня) все это в XML.

Я борюсь с:

  • Пытаюсь выяснить, как превратить их примеры XML (ссылка выше) в код Java;и
  • Как связать все вместе, чтобы JMSAppender публиковал сообщения через Camel в правильную очередь;это включает создание конечных точек и построение маршрутов

Вот моя лучшая попытка:

Где-то мне понадобится метод init() -типа для настройки моего CamelContext:

CamelContext context = new DefaultCamelContext();

context.addComponent("log4j-jms-appender", new LogComponent()); // ????
context.addComponent("activemq", 
    activeMQComponent("vm://localhost?broker.persistent=false")); // ???

context.addRoutes(new RouteBuilder() {
    public void configure() {
        from("log4j-jms-appender").to("activemq:queue:log-queue");
    }
});

Теперь, с этим кодом уже есть несколько проблем - и я, возможно, даже пошел по неверному пути.Как видите, я пытаюсь правильно добавить компоненты конечной точки.Я также совершенно не уверен, что такое строковый протокол "vm://" или что он обозначает.Все остальные примеры кода, которые я вижу, включают ActiveMQ, использующий протокол tcp.

В целом, было бы неплохо написать log4j Logger и Appender следующим образом:

Logger logger = Logger.getLogger("foo.bar");
JMSAppender jmsAppender = configureJMSAppender();

logger.addAppender(jmsAppender);

... и затем все его сообщения журнала помещаются в ActiveMQ log-queue через Camel (а не JNDI / Java).

Заранее благодарим за любую помощь!

1 Ответ

1 голос
/ 01 февраля 2012

У компонента camel-log нет потребителя ... поэтому вы не можете подключить маршрут для использования из журнала и отправки в очередь.

Один из вариантов - настроить JMSAppender в файле log4j.properties, как описано на этой странице ...

http://activemq.apache.org/how-do-i-use-log4j-jms-appender-with-activemq.html

Кроме того, vm: // означает транспорт виртуальной машины ... позволяет подключаться к брокеру ActiveMQ, работающему на вашей виртуальной машине ...

...