Apache Camel:Message Translator 和 Content Enricher with Example 有什么区别?

Apache Camel: What is difference between Message Translator and Content Enricher with Example?

我点击数据库得到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 中做同样的事情,我可以用上面的代码丰富原始内容,然后 return 返回。

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

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

解决此用例的 Camel 方法是:

  1. JDBC 打电话找员工
  2. Splitter 将员工列表拆分为单独的消息(创建 "iteration")
  3. JDBC 每个员工的详细数据调用
  4. 进一步处理详细消息或aggregate all detail messages,取决于您的进一步处理需要

这是Camel的主要魔法! 无需编写大量 "transport-level" 代码。只需编写一行 Camel DSL 即可查询数据库、启动 JMS 消费者以及您能想到的任何其他集成技术。

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

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