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

Apache Camel

[每日一学]apache camel|BDD方式开发apache camel|Groovy|Spock

apache camel 条件路由

Apache Camel 压缩包

如何在apache camel中附加速度文件内容