【问题标题】:Apache Camel: What is difference between Message Translator and Content Enricher with Example?Apache Camel:Message Translator 和 Content Enricher with Example 有什么区别?
【发布时间】:2020-06-18 00:34:25
【问题描述】:

我点击数据库获得 10 名员工;根据每个员工,我访问了另一个数据库并获取一些信息并将其连接起来。

据我了解,可以在 .process() 或 .enrich() 中完成(使用聚合器)

                    .to("jdbc:masterdata?outputClass=com.diavry.integrator.Employee")
                    .to("log:?level=INFO&showBody=true")                    
                    .process(e -> { 
                        List<Employee> eiEmployees = (List<Employee>) e.getIn().getBody(List.class);

                        for (Employee employee : eiEmployees) {

                            PreparedStatement statement = otherDbConnection.prepareStatement(sql);
                            statement.setString(1, employee.getUserid());
                            statement.setString(2, employee.getCompanyid());
                            resultSet = statement.executeQuery();
                            if (resultSet.next()) {
                                legalUnitName = resultSet.getString(1);
                            }
                            employee.setOrgstr_unitname(legalUnitName);
                        }
                    })

现在我可以在 Aggregator 中做同样的事情,我可以用上面的代码丰富原始内容并返回。

关于上述用例,我没有得到两者之间的区别?

【问题讨论】:

    标签: java apache-camel integration


    【解决方案1】:

    嗯,主要区别在于您在Processor (1) 中编写了 JDBC 代码。另一个区别是您管理迭代以获取每个员工的详细数据。这也意味着您需要自己进行任何错误处理(如果处理在迭代中间中止,如何恢复等)。

    解决这个用例的骆驼方法是:

    1. JDBC 调用获取员工
    2. Splitter 将员工列表拆分为单独的消息(创建“迭代”)
    3. 每位员工的 JDBC 详细数据调用
    4. 进一步处理详细信息或aggregate all detail messages,取决于您的进一步处理需要

    这就是骆驼的主要魔法! 无需编写大量“传输级”代码。只需编写一行 Camel DSL 即可查询数据库、提升 JMS 消费者以及您能想到的任何其他集成技术。

    当然还有所有常见的集成问题EIPs is implements。

    (1) 旁注:我建议放弃低级接口Processor 以支持simple Java Beans。

    【讨论】:

    • 谢谢伯基。您能否提供一些示例代码,因为我不确定我是否将其拆分并放在不同的路线以及如何丰富事物?有这样做的例子吗?
    • 查看 Camel 文档中的拆分和聚合示例:camel.apache.org/manual/latest/…
    • “我建议放弃低级接口处理器,转而使用简单的 Java Bean。” - 我曾经同意这种说法,直到我发现处理器实现可以作为方法引用传入。这种方式更好的 IDE 支持。
    • 是的,你是对的。该接口只有一种方法。直到现在我才想到这个。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 2012-09-02
    • 2021-10-25
    • 1970-01-01
    • 2015-02-16
    • 2020-11-11
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多