Apache camel 如何更新多个表

Apache camel 如何更新多个表,apache-camel,Apache Camel,我正在开发一个消息路由器,在处理消息时需要更新多个数据库表 举一个典型的例子,当您在JMS队列中收到一条订单消息时,该消息包含订单头信息,如客户名称、订单日期等,再加上一个订单项目列表,如项目名称、数量、,等等。在这种情况下,订单标题信息将进入订单表,而订单项目将进入订单项目表 <order-header customer="John Doe" date="2015-07-21" delivery-address="John's address"> <order-ite

我正在开发一个消息路由器,在处理消息时需要更新多个数据库表

举一个典型的例子,当您在JMS队列中收到一条订单消息时,该消息包含订单头信息,如客户名称、订单日期等,再加上一个订单项目列表,如项目名称、数量、,等等。在这种情况下,订单标题信息将进入订单表,而订单项目将进入订单项目

<order-header customer="John Doe" date="2015-07-21" delivery-address="John's address">
    <order-item name="Camel in action" qty="2"/>
    <order-item name="Linux cook book" qty="1"/>
</order-header>

我想到的最简单的想法是将消息路由到一个bean,该bean将实际完成整个工作,例如插入订单和检索订单id,然后使用该id插入每个订单项。我相信这会奏效,但对我来说,这看起来不像是一个纯粹的骆驼式方法

我想到的另一个想法,但实施起来更复杂,那就是:

  • 从JMS端点获取消息
  • 使用多种风格的content enricher EIP之一,使用订单id对其进行丰富
  • 使用拆分器EIP将上述内容丰富的邮件拆分为一个订单头和多个订单项邮件(并在exchange头中保留订单id)
  • 使用基于内容的路由器将订单头路由到知道如何将记录插入到订单表的JDBC/SQL端点,或将am订单项路由到知道如何将记录插入到订单表的另一个JDBC/SQL端点
  • 这看起来真的是一个可行的解决方案吗?我担心的是,在数据库端,ORDERORDER\u ITEMS表之间会有一个外键约束,如果出于任何原因,ORDER item实例会更快地得到处理,并且会在ORDER头之前到达其JDBC/SQL端点。显然这意味着麻烦

    你一般的看法是什么?这是一种可行的方法吗。?有没有办法解决我上面提到的排序问题

    请注意,订单场景只是一个更好地解释我的用例的示例。实际上,要处理的消息可能比插入或更新两个以上表的父子模板复杂得多


    任何想法都将不胜感激。提前感谢您的投入。

    使用您描述的Java类是一种纯粹的驼峰方法。骆驼毕竟是一个Java库。我经常这样做,效果非常好。如果JDBC/SQL组件符合要求,也可以使用它们。谢谢Namphibian。利用JDBC/SQL组件并使用这些组件提供的所有现成基础设施将是我的最终目标。我用另一种方法更新了我的问题。朱利安:是的,如果你能给我一个JMS消息的粗略定义,我可能会帮上一点忙,补充了一个JMS消息示例。请注意,我不是在讨论如何用camel解析XML,而是在讨论如何将从JMS端点到DB端点的所有内容组合在一起。我需要知道我的方法是否可行,是否需要注意一些事情。再次感谢。