log4j JMSAppender和ActiveMQ作为Camel端点

时间:2012-01-31 18:44:13

标签: java log4j messaging activemq apache-camel

我想通过Apache Camel将log4j JMSAppender连接到ActiveMQ队列,这样两者都是路由上的端点。此外,我想用Java(而不是XML)完成所有配置。

log4j javadoc herethis SO question都展示了如何建立这样一个连接 sans Camel(通过JNDI)的很好的例子,但它们不是我的意思我正在寻找。

我知道这可以通过activemq-camel Camel组件实现,事实上该组件的tutorial page显示了如何将池连接工厂设置为代理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://”协议是什么或它代表什么。我看到的所有其他代码示例都涉及使用tcp协议的ActiveMQ。

完全可以这样写一个log4j LoggerAppender就好了:

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

logger.addAppender(jmsAppender);

...然后通过Camel(而不是JNDI / Java)将所有日志消息放在ActiveMQ log-queue上。

提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

camel-log组件没有使用者...因此您无法连接从日志中使用并发送到队列的路由。

一个选项是在log4j.properties中配置JMSAppender,因为此页面描述了......

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

此外,vm://代表virtual machine transport ...它允许您连接到在VM中运行的ActiveMQ代理......