当前位置: 首页 > 知识库问答 >
问题:

多个camel路由之间的数据库事务

戚翼
2023-03-14

事务如何在带有Spring DSL的骆驼路由中工作,并且其中一条路由抛出异常?

如果routeB抛出异常,将如何将异常传播回RouteA。

如果在routeB中抛出异常,我可以看到TransactionalErrorHandler正在处理异常并回滚事务。

我的骆驼路由定义:

<route id="routeA">
  <from uri="direct-vm:endpointA" />
  <transacted />
  <to uri="direct-vm:endPointB" />
  <bean ref="beanA" method="save" />
  <onException>
    <exception>java.lang.Exception>
    <handled><constant>true</constant></handled>
    <bean ref="beanA" method="handleError" />
    <rollback markRollbackOnly="true" />
  </onException>
</route>

<route id="routeB">
  <from uri="direct-vm:endPointB" />
  <throwException ref="ex"/>
</route>

共有1个答案

蓟清野
2023-03-14

在camel中,Transacted命令只是SpringTransactionTemplate的包装器,因为它将在PlatformTransactionManager提供的事务中登记路由。您在org.apache.camel.spring.spi.SpringTransactionPolicy上获得的唯一配置选项是传播行为,因此处理回滚等必须在事务路由中完成。

在这种情况下,您应该从路由B捕获异常,如果它到达错误处理程序,那么就太晚了。

<route id="routeA">
    <from uri="direct-vm:endpointA" />
    <transacted/>
    <doTry>
        <to uri="direct-vm:endPointB" />
        <doCatch>
           <exception>java.lang.Exception</exception>
           <bean ref="beanA" method="handleFail"/>
        </doCatch>
        <doFinally>
           <bean ref="beanA" method="save" />
        </doFinally>
    </doTry>
</route>

<route id="routeB">
    <from uri="direct-vm:endPointB" />
    <throwException ref="ex"/>
</route>
 类似资料:
  • 问题内容: 我一直在使用手动数据库选择来处理具有两个独立数据库的项目。我已经在设置中定义了数据库。 进一步阅读之后,看来数据库路由实际上是解决问题的方法。但是,在阅读了文档和此处的一些相关文章之后,我比以往更加困惑。 在我的设置中,我有: 我知道我必须像这样定义路由器类(我认为在文件中): 那呢 每个模型都需要一个还是自动的?除此之外,我仍然得到一个错误: django.core.exceptio

  • String postProcessor=“file: from(processFiles).threads(10).routeid(“someid”) .to(“bean:someBean”); 从(postProcessor).routeid(“PostProcress”).到(“bean:PostProcessorBean”); 解决方案已经到位。但目前需要更多的时间。因此,我们尝试在cam

  • 试图在kubernetes上进入istio,但似乎我缺少了一些基础知识,或者我正在做一些背靠背的事情。我对kubernetes很有经验,但istio及其虚拟服务让我有点困惑。 我创建了2个部署(helloworld-v1/helloworld-v2)。两者具有相同的图像,唯一不同的是环境变量 - 输出版本:“v1”或版本:“v2”。我正在使用我编写的一个小测试容器,它基本上返回我进入应用程序的标头

  • Navigating Programmatically

  • 这里的练习是:我需要编写一个递归方法,它可以得到N*N大小的正整数矩阵,起始单元格行和列索引以及结束单元格行和列索引,并且该方法需要返回从起始单元格到结束单元格的可能路径数,这些约束条件是:a.你可以从当前位置移动到左单元格、右单元格、上单元格或下单元格。b.你不能越过主对角线,但是你可以转到对角线上的单元格(但不能越过它)。路由中的每个单元格只出现一次。d.矩阵需要像原始矩阵一样,末尾有原始单元

  • 我在两台服务器上部署了Apache Camel应用程序,它们使用JMSendpoint。我想确保一次只使用一条来自jmsendpoint的驼峰路由。我可以用于集群的唯一选项是使用数据库作为锁存储。Apache Camel是否提供了这样的功能?