如何以正确的调用顺序而不是按完成顺序记录camel中路由中每个节点的性能?

时间:2015-06-05 14:07:20

标签: performance apache-camel spring-aop

我有一个像这样的简单路线

    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())); 
                    }
}

2 个答案:

答案 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