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

发生跨提交时路由级别不会捕获异常?

司徒焕
2023-03-14

使用骆驼2.13.2.在我解决问题时,请耐心等待:

我有一个子进程,我需要跟踪飞行中的订单。主进程使用一个长事务,在一些冗长的验证结束时保留订单信息。如果两个具有相同密钥的订单相隔子秒提交,挂起的订单验证可能不会标记最后一个订单。因此,我有一个路由,它使用带有PROPIGATION_REQIRES_NEW的新事务来保留飞行中的信息,以补充挂起的订单验证,直到相关订单信息被提交:

<route id="insertInflightRoute">
        <from uri="direct-vm:insertInflightEndpoint"/>          
        <transacted ref="PROPAGATION_REQUIRES_NEW" />

<代码>

            <bean ref="inflightService" method="setInflightException"/>
        </onException>

        <!-- DB insert via Mybatis autowired in bean. Working fine-->
        <bean ref="inflightService" method="insert"/>
    </route>

当第二个订单尝试插入到这个飞行表中时,一旦事务尝试提交,就会引发PK违规异常。这也工作正常。

我的问题是路由级别

  1. 应路由级别

我想指出的是,路由级别的< code >


共有2个答案

俞博涛
2023-03-14

我有一个解决我的问题的变通办法,虽然不是我想的那么理想。

我回到呼叫路由并封装了

        <doTry>
            <!-- insert into inflight mdn table immediately -->
            <to uri="direct-vm:insertInflightEndpoint"/>
        <doCatch>
            <exception>java.sql.SQLException</exception>
            <bean ref="inflightService" method="setInflightException"/>
        </doCatch>
        </doTry>

隗瑞
2023-03-14

如果您希望路由级别onException改变原始的交换/消息,您需要设置它来处理它,例如handled=true,然后在bean中您可以在交换上设置一个新的异常,或者抛出一个异常。

 类似资料:
  • Camel Version 2.22.0 运行时:SpringBoot:2.0.2.RELEASE JDK版本:1.8。0_121 弹性公网IP:收件人列表。 问题:从接收方列表的并行进程引发的异常未在路由级别的onExc的子句中捕获。 下面是DSL

  • 概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 日志记录,这篇文章咱们分享:路由中间件 - 捕获异常。当系统发生异常时,提示 “系统异常,请联系管理员!”,同时并发送 panic 告警邮件。 什么是异常? 在 Go 中异常就是 panic,它是在程序运行的时候抛出的,当 panic 抛出之后,如果在程序里没有添加任何保护措施的话,控制台就会在打印出 panic 的详细情况,然后终止运行

  • 我正在尝试将一个任务提交给Java的ExecutorService。它要么需要一个Callable,它允许抛出异常,要么需要一个Runnable。我的用例是愚蠢的:我想安排一个抛出异常的任务,但它是一个无效的方法。因此,我不能使用Callable或Runnable,因为方法定义与我的用例不匹配。我还想让我的异常从提交后收到的Future传播。有什么想法吗?

  • 问题内容: 我几乎从来没有玩过客户端方面的东西,而这个大概简单的任务正在踢我的屁股:) 我有一些链接。OnClick我想阻止默认操作,捕获其href网址,向该url提交ajax GET,并简单地添加结果…但是我什至无法越过起始行:) 播放时间锚点示例: 现在,我已经针对SO上的 类似 请求提出了一些建议,但是这些链接仍然会使浏览器导航到href网址。 即使只是 …链接仍然导航到另一页。 我有点像婴

  • 在另一个用@ControllerAdvice注释的类中,我有一个ExceptionHandler,它捕获IllegalArgumentException并将其转换为HTTP状态码为400的格式化响应。 当通过触发API的有效路径来执行此操作时,一切正常。当我尝试调用API的无效/不存在路径时,会出现问题。调用HandlerInterceptor并引发异常,但未触发我的ExceptionHandle

  • 问题内容: 尝试添加pdf文件生成时,我看到奇怪的行为。 在if语句上,以下代码将引发:both \ routes.js 错误:只能在方法调用中调用Meteor.userId。在发布函数中使用this.userId。在[对象Object] .Router处的Object.Meteor.user(packages / accounts-base / accounts_server.js:24:1)处