gpt4 book ai didi

java - 如何访问Camel errorHandler中的异常?

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:17 25 4
gpt4 key购买 nike

用例

我想以可重用的方式记录 Camel 中特定路由的未处理异常。具体来说,我想从异常中提取足够的信息并将其写入数据库,然后由某些监控软件读取。通过使用死信队列,我能够将特定路由的所有未处理异常路由到那里。不幸的是,当传递给记录器时,交换中的异常始终为 null

示例代码

下面的代码强制抛出异常,然后将其路由到错误处理程序。我期望 exchange.getException() 返回引发的异常,但在本例中它是 null

Java 代码

public class JobRunner {

public void run(Exchange exchange) {
throw new RuntimeException("Hello, World!");
}

public void processException(Exchange exchange) {
Exception e = exchange.getException();
// e is null
}

}

Camel 配置

<camelContext xmlns="http://camel.apache.org/schema/spring">

<errorHandler id="jobErrorHandler"
type="DeadLetterChannel"
deadLetterUri="seda:errorHandler" />

<route id="routeErrorHandler">
<from uri="seda:errorHandler" />
<bean ref="jobRunner" method="processException" />
</route>

<route id="scheduled_job" errorHandlerRef="jobErrorHandler">
<from uri="quartz2://test/job?cron=0+*/5+*+*+*+?" />
<bean ref="jobRunner" method="run" />
</route>

</camelContext>

问题

  • 如何将异常路由到错误处理程序?

最佳答案

经过一番挖掘,我发现原始异常作为属性存储在 Exchange 中。

Exception e = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);

关于java - 如何访问Camel errorHandler中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com