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 方法是:
- JDBC 打电话找员工
- Splitter 将员工列表拆分为单独的消息(创建 "iteration")
- JDBC 每个员工的详细数据调用
- 进一步处理详细消息或aggregate all detail messages,取决于您的进一步处理需要
这是Camel的主要魔法! 无需编写大量 "transport-level" 代码。只需编写一行 Camel DSL 即可查询数据库、启动 JMS 消费者以及您能想到的任何其他集成技术。
当然还有所有 EIPs is implements 常见的集成问题。
(1) 旁注:我建议放弃低级接口 Processor
以支持 simple Java Beans。
我点击数据库得到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 方法是:
- JDBC 打电话找员工
- Splitter 将员工列表拆分为单独的消息(创建 "iteration")
- JDBC 每个员工的详细数据调用
- 进一步处理详细消息或aggregate all detail messages,取决于您的进一步处理需要
这是Camel的主要魔法! 无需编写大量 "transport-level" 代码。只需编写一行 Camel DSL 即可查询数据库、启动 JMS 消费者以及您能想到的任何其他集成技术。
当然还有所有 EIPs is implements 常见的集成问题。
(1) 旁注:我建议放弃低级接口 Processor
以支持 simple Java Beans。