Apache Camel:Message Translator 和 Content Enricher with Example 有啥区别?
Posted
技术标签:
【中文标题】Apache Camel:Message Translator 和 Content Enricher with Example 有啥区别?【英文标题】: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 中做同样的事情,我可以用上面的代码丰富原始内容并返回。
关于上述用例,我没有得到两者之间的区别?
【问题讨论】:
【参考方案1】:嗯,主要区别在于您在Processor
(1) 中编写了 JDBC 代码。另一个区别是您管理迭代以获取每个员工的详细数据。这也意味着您需要自己进行任何错误处理(如果处理在迭代中间中止,如何恢复等)。
解决这个用例的骆驼方法是:
-
JDBC 调用获取员工
Splitter 将员工列表拆分为单独的消息(创建“迭代”)
每位员工的 JDBC 详细数据调用
进一步处理详细信息或aggregate all detail messages,取决于您的进一步处理需要
这就是骆驼的主要魔法! 无需编写大量“传输级”代码。只需编写一行 Camel DSL 即可查询数据库、提升 JMS 消费者以及您能想到的任何其他集成技术。
当然还有所有常见的集成问题EIPs is implements。
(1) 旁注:我建议放弃低级接口Processor
以支持simple Java Beans。
【讨论】:
谢谢伯基。您能否提供一些示例代码,因为我不确定我是否将其拆分并放在不同的路线以及如何丰富事物?有这样做的例子吗? 查看 Camel 文档中的拆分和聚合示例:camel.apache.org/manual/latest/… “我建议放弃低级接口处理器,转而使用简单的 Java Bean。” - 我曾经同意这种说法,直到我发现处理器实现可以作为方法引用传入。这种方式更好的 IDE 支持。 是的,你是对的。该接口只有一种方法。直到现在我才想到这个。非常感谢!以上是关于Apache Camel:Message Translator 和 Content Enricher with Example 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
[每日一学]apache camel|IBMWebsphere MQ header issue|MQRFH2 |MQSTR