【发布时间】:2012-02-23 11:59:01
【问题描述】:
我想通过 Apache Camel 将 log4j JMSAppender 连接到 ActiveMQ 队列,以便两者都是沿途的端点。此外,我想用 Java(不是 XML)完成所有配置。
log4j javadoc here 和 this SO question 都展示了如何建立这种连接的很好的例子sans Camel(通过 JNDI),但它们并不是我想要的。
我知道这可以通过activemq-camel Camel 组件实现,事实上,该组件的tutorial page 展示了如何设置到代理 URL 的池连接工厂。不幸的是(对我来说)都是 XML。
我正在努力:
- 试图弄清楚如何将他们的 XML 示例(上面的链接)转换为 Java 代码;和
- 如何将所有内容绑定在一起,以便
JMSAppender通过 Camel 将消息发布到正确的队列;这涉及端点创建和路由构建
这是我最好的尝试:
我需要一个init()-type 方法来设置我的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://”协议是什么或它代表什么。我看到的所有其他代码示例都涉及使用 tcp 协议的 ActiveMQ。
总而言之,像这样写一个 log4j Logger 和 Appender 就好了:
Logger logger = Logger.getLogger("foo.bar");
JMSAppender jmsAppender = configureJMSAppender();
logger.addAppender(jmsAppender);
...然后通过 Camel(而不是 JNDI/Java)将其所有日志消息放在 ActiveMQ log-queue 上。
提前感谢您的任何帮助!
【问题讨论】:
标签: java log4j messaging activemq apache-camel