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

当您在JMS队列中收到订单消息时,请说明经典示例,该消息包括订单 Headers 信息,例如客户名称,订单日期等,以及订购商品的列表,例如商品名称,数量等 . 在这种情况下订单 Headers 信息将转到 ORDERS 表,而订单商品将转到 ORDER_ITEMS 表 .

<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,例如插入订单并检索订单ID,然后使用该id插入每个订单项 . 我相信这会起作用,但对我而言,它看起来并不像纯粹的骆驼 .

我想到的另一个想法是实现起来更复杂:

  • 从JMS endpoints 获取消息

  • 使用多种内容丰富的EIP之一,使用订单ID丰富它

  • 使用拆分器EIP将上面的丰富消息拆分为一个Order头和多个Order items消息(并在交换头中保留订单ID)

  • 使用基于内容的路由器将Order标头路由到JDBC / SQL endpoints ,该 endpoints 知道如何将记录插入 ORDERS 表或将am Order项路由到另一个知道如何将记录插入 ORDER_ITEMS 表的JDBC / SQL endpoints

这实际上看起来像是一个可行的解决方案吗?我担心的是,我希望在 ORDERORDER_ITEMS 表之间的数据库端有一个外键约束,如果由于任何原因订单项实例将被更快地处理,那么它会发生什么,最终将在订单之前到达其JDBC / SQL endpoints 头 . 显然这意味着麻烦 .

你有什么看法?这是否可行作为一种可行的方法 . 有没有办法解决我上面的测序问题 .

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

任何想法将不胜感激 . 提前感谢您的意见 .