我有一个像这样的简单路线
from("file:data/inbox?noop=true").transform().body().to("file:data/outbox").bean(UpdateInventory.class);
from("direct:update").to("file:data/anotherbox").to("direct:newupdate");
from("direct:newupdate").to("file:data/newbox");
我期待的输出是
-file://data/inbox
--transform[simple{body}] 15 ms
--file:data/outbox 5
---bean[com.classico.sample.UpdateInventory@3a469fea 19
---file:data/anotherbox 6
----direct:newupdate 5
-----file:data/newbox 4
我尝试使用EventNotifier,当收到ExchangeCompletedEvent时,我获取了消息History.But,因为第二次交换完成后,第一个消息历史以调用的相反顺序显示。是否可以存储所有的messgae历史记录一个集合并以相反的顺序打印它们还是有任何适合的事件。?
if (event instanceof ExchangeCompletedEvent) {
ExchangeCompletedEvent exchangeCompletedEvent = (ExchangeCompletedEvent) event;
Exchange exchange = exchangeCompletedEvent.getExchange();
String routeId = exchange.getFromRouteId();
List<MessageHistory> list = exchange.getProperty(Exchange.MESSAGE_HISTORY, List.class);
for (MessageHistory history : list) {
String id = history.getNode().getId();
String label = URISupport.sanitizeUri(history.getNode().getLabel());
log.info(String.format(MESSAGE_HISTORY_OUTPUT, routeId, id, label, history.getElapsed()));
}
}
答案 0 :(得分:2)
您可以使用JMX获取每个处理器的所有详细信息。
每个route / camelContext上还有一个dumpRouteStatsAsXml
操作,可以输出包含所有性能统计信息的路径的xml文件。
我们在hawtio Web控制台中使用它来列出这种信息。
Camel Karaf / Jolokia Commands也使用了这个
在Camel的下一个版本中,如果你知道他们的id,你可以更容易地从CamelContext
获得各种处理器mbeans
然后你可以使用mbean上的getter来获得性能统计数据。
建议的事件notifer也很棒,但是事件处于更高的级别,尽管您会收到一个发送到端点的事件,例如某些外部系统,这通常足以捕获详细信息。对于此处询问的低级别详细信息,您需要使用JMX统计信息。
哦,我忘了告诉消息历史记录EIP,它还记录了消息如何与时间统计信息一起路由。
这也许正是您所需要的,然后您可以从该交易所获得该信息,如该链接所示。
答案 1 :(得分:0)
我建议使用camel EventNotifier。您可以在此处找到有关如何使用它的文档:
http://camel.apache.org/eventnotifier-to-log-details-about-all-sent-exchanges.html