【发布时间】:2021-11-23 05:57:21
【问题描述】:
在我的骆驼路线中,我有一个像这样的简单分割
.split(body(), eventListAggregationStrategy).parallelProcessing()
.process(rawEventTransformationProcessor)
.end()
如果.process(rawEventTransformationProcessor) 内部发生异常,我希望它们被处理并发送到错误队列。然而,我所有的尝试都失败了,整条路线都停止了。
我以多种方式尝试了 onException(使用handled、continue、shareUnitOfWork)等等。
onException(RawEventTransformationException.class)
.to("log:RawEventTransformationException?showAll=true&multiline=true&level=ERROR")
.handled(true)
.process(exchange -> {
RawEventTransformationException cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, RawEventTransformationException.class);
exchange.getIn().setBody(cause.getFailedEvent());
})
.marshal().json(JsonLibrary.Jackson, RawEvent.class)
.to("rabbitmq://errors?queue=transformed-data-fails&routingKey=transformed-data-fails&autoDelete=false");
如果我有一个额外的direct 路由,当异常起作用时,我会从处理器内部触发该路由。
catch (RawEventTransformationException e1) {
producerTemplate.sendBody(e1);
exchange.getIn().setBody(List.of());
throw e1;
}
捕获此异常并让其余异常继续的最佳做法是什么?
【问题讨论】:
-
如果你想发送错误信息到特定队列你可以配置死信通道:camel.apache.org/components/3.13.x/eips/…
标签: java exception split apache-camel