Apache Camel:带有示例的Message Translator和Content Enricher有什么区别?

问题描述 投票:0回答:1

我命中数据库后得到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个回答
0
投票

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

解决此用例的骆驼方法是:

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

这是骆驼的主要魔法无需编写很多“运输级”代码。只需编写一行Camel DSL即可查询数据库,增强JMS使用者和您可以想到的任何其他集成技术。

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

(1)旁注:我建议放弃低级接口Processor,而改为simple Java Beans

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.