繁体   English   中英

log4j JMSAppender和ActiveMQ作为骆驼端点

[英]log4j JMSAppender and ActiveMQ as Camel endpoints

我想将log4j JMSAppender连接到Apache Camel上的ActiveMQ队列,以便它们都是沿着路由的端点。 此外,我想用Java(不是XML)完成所有配置。

这里的log4j javadoc和这个SO问题都显示了如何在没有 Camel的情况下(通过JNDI)建立这样的连接的好例子,但是它们并不是我想要的。

我知道通过activemq-camel Camel组件可以做到这一点,实际上,该组件的教程页面显示了如何将池连接工厂设置为代理URL。 不幸的是(对我而言)全部使用XML。

我正在努力:

  • 试图弄清楚如何将其XML示例(上面的链接)转换为Java代码;
  • 如何将所有内容捆绑在一起,以便JMSAppender通过Camel将消息发布到正确的队列; 这涉及端点创建和路由构建

这是我的最佳尝试:

在某个地方,我将需要一个init() - CamelContext方法来设置我的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上。

在此先感谢您提供的所有帮助!

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

一种选择是在log4j.properties中配置JMSAppender,如本页所描述...

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

此外,vm://代表虚拟机传输 ...它允许您连接到在VM中运行的ActiveMQ代理...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM