我有一条呼叫外部休息服务的路线。我已经配置了我的错误处理程序,如下所示。
errorHandler(deadLetterChannel("jms:dlc").maximumRedeliveries(3));
我想做什么:
如果与外部api的连接失败,我想重试3次然后发送到deadLetterChannel
如果api调用正常,我想查看状态代码,记录响应,然后将消息发送到deadLetterChannel。
为此,我将 throwExceptionOnFailure 设置为false。
在我的路线中,我有一个bean作为最后一个端点。该bean从外部端点接收响应并检查状态。
void process(Exchange exchange){
//check http status code
//if not success
exchange.setProperty(Exchange.ROUTE_STOP,true);
//sendToDeadLetterQueue;
}
我的问题是,即使我能够连接到API,也会发生重新发送。我希望重新发送会发生错误。但我正在处理响应并设置交换停止。
我可以停止从我的豆子中重新开始吗?
答案 0 :(得分:0)
您可以使用onException,如下所示:
<onException>
<exception>SomeException</exception>
<handled><constant>true</constant></handled>
<process ref="failureResponse"/>
</onException
答案 1 :(得分:0)
使用onException标记处理为true
Java DSL
onException(ExceptionClass).handled(true)
.to(deadLetterChannel);
Spring DSL:
<onException>
<exception>SomeException</exception>
<handled><constant>true</constant></handled>
<to uri=deadLetterChannel/>
</onException>
要获得更多说明,请点击here