我尝试将EventNotifier添加到使用Camel的Main类的Apache Camel独立应用程序中。
http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html
public void boot() throws Exception {
Main main = new Main();
main.addRouteBuilder(new MyRouteBuilder());
System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n");
main.run();
}
我想添加一个类似于本食谱示例中的EventNotifier:
http://camel.apache.org/eventnotifier-to-log-details-about-all-sent-exchanges.html
这是我简单的EventNotifier
@Override
public void notify(EventObject event) throws Exception {
logger.info(event.toString());
}
@Override
public boolean isEnabled(EventObject event) {
logger.info("Checked if enabled");
return true;
}
使用Java DSL,我想做类似的事情:
context.getManagementStrategy().addEventNotifier(new MyEventNotifier());
Main上有一些方法似乎有用:main.getOrCreateCamelContext()和main.getCamelContexts()。
getOrCreateCamelContext 将创建一个上下文,但是当调用main.run()时,该上下文消失了(Camel-1并且是唯一的上下文但是在main.run()之后,Camel-2是唯一的背景)。
在调用main.run()之前,getCamelContexts 为空。
我尝试在Main创建上下文后在另一个线程中添加EventNotifier,但我的日志中没有显示任何内容,所以我怀疑在上下文启动之前需要添加EventNotifier。
有一种简单的方法吗?
答案 0 :(得分:0)
我找到了一种方法:创建一个匿名内部类并覆盖postProcessCamelContext方法。
Main main = new Main() {
@Override
protected void postProcessCamelContext(CamelContext camelContext) throws Exception {
super.postProcessCamelContext(camelContext);
camelContext.getManagementStrategy().addEventNotifier(new MyEventNotifier());
}
};