0

我的 Apache camel 项目开始有一个非常好的结构,但我遇到了困难,因为我在 routeContext 中的路由无限执行。我所有的路由都使用 SQL 组件,我希望我的所有路由只执行一次。

我发现,当我的 routeContext 中有两条路线时,两条路线只执行一次,但只要我添加第三条(无论第三条是什么路线),骆驼开始无限执行所有路线。我的所有路由都导致 sql 插入,因此多次运行相同的路由会导致重复键错误。

我认为这可能是我的一条路线中的错误,但我尝试过切换顺序等,每次我在 routeContext 中从两条路线切换到三条路线时,问题都会再次出现。今晚我还尝试将路线分开到不同的路线上下文中,但它没有改变任何东西。我还取出了所有错误处理程序以确保它与它们无关。

我开始认为这是 Camel 中 sql 组件的错误。大家的想法是什么?我应该切换到不同的组件(例如 jdbc)吗?

这是我的xml文件的样子......

骆驼语境

<import resource="camel-routes.xml"/>
<import resource="database.xml"/>       

<camel:camelContext trace="true">   
  <camel:propertyPlaceholder location="classpath:sql.properties" id="placeholder"/>
  <camel:routeContextRef ref="sourceToStaging"/>
</camel:camelContext>

骆驼路线

<routeContext id="sourceToStaging" xmlns="http://camel.apache.org/schema/spring">
<route id="processTypeOption-route">    
    <from uri="sourceSql:{{sql.selectTypeOption}}"/>
    <transacted/>           
    <to uri="targetSql:{{sql.insertTypeOptionOrig}}"/>                          
    <to uri="targetSql:{{sql.insertTypeOptionStg}}"/>                       
    <to uri="controlbus:route?routeId=processTypeOption-route&amp;action=stop&amp;async=true"/>
</route>

<route id="processProductSize-route">    
    <from uri="sourceSql:{{sql.selectProductSize}}"/>
    <transacted/>           
    <to uri="targetSql:{{sql.insertProductSizeOrig}}"/>                             

    <to uri="targetSql:{{sql.insertProductSizeStg}}"/>                     
    <to uri="controlbus:route?routeId=processProductSize-route&amp;action=stop&amp;async=true"/>
</route>                
<route id="processStatus-route">    
    <from uri="sourceSql:{{sql.selectStatus}}"/>
    <transacted/>           
    <to uri="targetSql:{{sql.insertStatusOrig}}"/>                              
    <to uri="targetSql:{{sql.insertStatusStg}}"/>                       
    <to uri="controlbus:route?routeId=processStatus-route&amp;action=stop&amp;async=true"/>
</route>                        
</routeContext> 

任何人都可以请帮忙。谢谢

4

1 回答 1

0

我也有过类似的情况。但是线程在加载骆驼上下文时无限执行。在到达端点后尝试从交换标头中删除 CamelHttp*。

于 2013-09-16T16:40:45.830 回答