我想通过Apache Camel将log4j JMSAppender
连接到ActiveMQ队列,这样两者都是路由上的端点。此外,我想用Java(而不是XML)完成所有配置。
log4j javadoc here和this SO question都展示了如何建立这样一个连接 sans Camel(通过JNDI)的很好的例子,但它们不是我的意思我正在寻找。
我知道这可以通过activemq-camel
Camel组件实现,事实上该组件的tutorial page显示了如何将池连接工厂设置为代理URL。不幸的是(对我而言)它全部都是XML。
我正在努力:
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 Logger
和Appender
就好了:
Logger logger = Logger.getLogger("foo.bar");
JMSAppender jmsAppender = configureJMSAppender();
logger.addAppender(jmsAppender);
...然后通过Camel(而不是JNDI / Java)将所有日志消息放在ActiveMQ log-queue
上。
提前感谢您提供的任何帮助!
答案 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代理......