Camel -基于消息的特定异常处理

8nuwlpux  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(155)

我有一个队列系统,camel只是其中的一小部分。在这个队列系统中,对于一些队列,当队列已满时,代理返回FAIL。为了处理这个问题,我查看了我得到的JMS异常,从消息中我可以看到原因是否是队列已满。
我想在Camel中实现的是,对于满队列的特定情况,我想重试传递,而对于任何其他JMS异常(或任何其他异常),我想将其发送到DLQ。
我假设我必须使用onException(JMSException.class)并提供一个自定义处理器,它将查看异常消息,但在此之后,我不确定该做什么。在这种情况下,我尝试从处理器引发特定的自定义异常(例如QueueFailedException),并在设置中出现另一个onException(QueueFailedException),但随后我得到以下错误:
“(...)错误org.apache.camel.processor.FatalFallbackErrorHandler -尝试处理以前在exchangeId上引发的异常时出现异常:(...)使用:[通道[DelegateSync[org.eumetsat.gems.bridge.JmsMessageReplicator$JMSExceptionHandler@67a93d5f]]]]。先前的异常和新的异常将记录在下面的位置。”

rjjhvcjd

rjjhvcjd1#

据我所知,你需要告诉Camel它必须考虑一个异常处理,并且它应该根据一些逻辑检查重试发送消息。.handled()除了布尔值之外还接受 predicate 或表达式。
以下部分难道不能帮助您实现这一目标吗?

  • 将异常标记为已处理
  • 使用retrywhile predicate 进行细粒度重试。

我认为您能够确定该异常是否真的是由队列通过捕获的JMSException溢出引起的。

相关问题