log4j JMSAppender и ActiveMQ в качестве конечных точек Camel

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

Документ log4j javadoc здесь и < href="https://stackoverflow.com/questions/2097754/using-the-log4j-jmsappender-with-activemq">этот вопрос 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).

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


person IAmYourFaja    schedule 31.01.2012    source источник


Ответы (1)


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

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

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

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

person Ben ODay    schedule 01.02.2012
comment
Спасибо, Бодей - так вы говорите, что это не похоже на то, что я могу сделать так, чтобы Camel был посредником между моим log4j JMSAppender и ActiveMQ - мне нужно просто использовать чистое соединение log-to-AMQ? - person IAmYourFaja; 01.02.2012
comment
это всего лишь один вариант, вам не нужен Camel для этого ... просто брокер AMQ - person Ben ODay; 01.02.2012
comment
Да, log4j может отправлять сообщения журнала непосредственно брокеру JMS. Вам не нужен Camel посередине. Однако, если вы запускаете Camel в контейнере OSGi, который использует ведение журнала pax, вы можете заставить Camel прослушивать журналы с помощью компонента Camel ведения журнала pax: camel.apache.org/pax-logging.html - person Claus Ibsen; 02.02.2012