Apace Camel:自定义重新交付政策

时间:2016-10-18 06:31:07

标签: java apache-camel

我有一条呼叫外部休息服务的路线。我已经配置了我的错误处理程序,如下所示。

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,也会发生重新发送。我希望重新发送会发生错误。但我正在处理响应并设置交换停止。

我可以停止从我的豆子中重新开始吗?

2 个答案:

答案 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