我在找出最后处理消息的模式时遇到了问题。就像拦截是否发生在聚合、拆分或处理之后。在哪种模式下我的拦截处理器工作。有什么办法可以查到吗?
您可以从CamelMessageHistory 交换属性中获取一些详细信息,该属性是DefaultMessageHistory 对象的列表。这些包含 routeId 和有关端点节点的一些详细信息,例如其 id。如果您使用的是interceptFrom,camel 会将截获的端点 uri 存储到 CamelInterceptedEndpoint 标头中。
拦截和打印历史记录
intercept()
.process(new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
String output = "History:\n";
List historyList = (List)exchange.getProperty(Exchange.MESSAGE_HISTORY);
for (int i = 0; i < historyList.size(); i++) {
DefaultMessageHistory messageHistory = (DefaultMessageHistory)historyList.get(i);
output += "\t[" + (i + 1) + "]"
+ messageHistory.getRouteId() +":"
+ messageHistory.getNode().getShortName()
+ "\n";
}
System.out.println(output);
}
});
然而,这对您没有多大帮助,因为信息相当有限,而且许多模式(如拆分)创建了具有自己新历史的新交换。但是对于这些,您可以查看是否设置了 CamelSplitIndex 之类的标头,然后确定是否发生了拆分。
如果有任何其他方法可以完全满足我在数据库中存储路由详细信息的需求
您可以保持简单,并使用事件来跟踪交换的状态。只需编写一个处理器或组件,您可以使用它来编写/存储在路由期间发生的事情和时间。您可以使用 breadcrumbId 作为交换的唯一 ID,因为即使在拆分后这种情况仍然存在。
然后处理器或自定义组件可以简单地将这些事件流式传输到某个文件或将它们存储到本地数据库(如 sqlite)以进行进一步处理。避免将它们直接发送到外部数据库或服务,以尽量减少对实际路线的影响。
这种图表是我需要从路线创建的。提前致谢。
你看过Hawtio吗?它已经做了很多。我正在使用 Apache Karaf 运行 Hawtio,它为我提供了路由图和相当详细的路由、端点等分析数据。它也是open source,因此您可以对其进行修改或将其用作您自己的应用程序的参考。
如果您喜欢自己做类似的事情,您可以考虑使用 JMX 来管理和监控骆驼应用程序。据我了解,Hawtio 在后台使用它来获取有关在 JVM 中运行的应用程序的更多信息。