Я хочу подключить 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).
Заранее благодарим за любую помощь!