【问题标题】:Which Enterprise Integration pattern is used in camel骆驼使用哪种企业集成模式
【发布时间】:2022-01-10 06:43:58
【问题描述】:

我正在使用 Apache 骆驼路由来处理我的消息。在我的用户界面中,我需要显示这些消息,在详细页面中,我需要显示路由中的消息流 所以我计划使用拦截,以便在输入每个模式之前拦截消息,处理器将在那里将其存储在 DB 中。但是我在找出最后处理消息的模式时遇到了问题。 就像拦截是否发生在聚合、拆分或处理之后。在哪种模式下我的拦截处理器工作。 如果有任何其他方法可以完全满足我在数据库中存储路由详细信息的需求,有什么方法可以找出这个或它可以吗? 请帮忙 这种图表是我需要从路线中创建的。 提前致谢。

【问题讨论】:

    标签: routes apache-camel spring-camel camel-sql


    【解决方案1】:

    我在找出最后处理消息的模式时遇到了问题。就像拦截是否发生在聚合、拆分或处理之后。在哪种模式下我的拦截处理器工作。有什么办法可以查到吗?

    您可以从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 中运行的应用程序的更多信息。

    【讨论】:

    • 你能检查一下添加的图像吗?这就是我需要实现的目标
    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 2013-01-21
    • 2013-04-17
    • 2014-09-29
    • 2013-09-16
    • 1970-01-01
    • 2013-01-08
    • 2012-11-10
    相关资源
    最近更新 更多