【问题标题】:OnException maximumRedeliveries ignoredOnException maximumRedeliveries 被忽略
【发布时间】:2018-05-30 09:45:14
【问题描述】:

在以下路由中,当我们遇到异常时,将忽略 redeliveryPolicy 中的 maximumRedeliveries 子句。我们得到:

(ExchangeId:ID-UW205584-58231-1527668174534-39-24 上的 MessageId:ID-UW205584-58231-1527668174534-39-248)传递失败。交付尝试:0

(ExchangeId:ID-UW205584-58231-1527668174534-39-24 上的 MessageId:ID-UW205584-58231-1527668174534-39-248)传递失败。交付尝试:1

然后它保持在无限循环中,重复最后一次重试。任何的想法?非常感谢社区!

我们的路线如下所示:

<?xml version="1.0" encoding="ASCII"?>
<routes xmlns="http://camel.apache.org/schema/spring">
    <route handleFault="true">
        <from uri="switchyard://ProcessTaskEx"/>
        <log message="ProcessTaskEx - message received: ${body}" loggingLevel="DEBUG" logName="WebServiceQueues" />
        <to uri="switchyard://RequestCapacity"/>
        <onException>
            <exception>java.lang.Exception</exception>
             <exception>webservicequeues.utilities.WebServiceQueueException</exception>

            <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="6000" maximumRedeliveryDelay="90000" retriesExhaustedLogLevel="INFO" retryAttemptedLogLevel="INFO"/>
            <handled>
                <constant>true</constant>
            </handled>

            <log message="Failed after Retry.Sending ProcessTask Request to Error Queue" loggingLevel="ERROR" logName="WebServiceQueues" />
            <to uri="switchyard://ErrorProcessTaskExQueue"/>
        </onException>
    </route>
</routes>

【问题讨论】:

    标签: apache-camel spring-camel


    【解决方案1】:

    因为你得到一个无限循环,听起来邮件头 CamelRedeliveryCounter 每次都会被覆盖,因此它永远不会达到 2 的 maximumRedeliveries

    对发生错误的端点的调用是否有可能删除或重置消息头?特别是CamelRedeliveryCounter?

    【讨论】:

    • 我不这么认为。我们对标题不执行任何操作,并且我已将所有转换器设置为平面转换,这可能是一个错误..?我们从 Fuse 6.1 camel 2.1 升级到 Fuse 6.3 Camel 2.17 stackoverflow.com/questions/48774952/…
    • 要查明这是否是端点问题,我会将端点 RequestCapacity 替换为一个简单的 bean,例如抛出 WebServiceQueueException 并可能将 ErrorProcessTaskExQueue 端点替换为 Camel 模拟。如果重新传递策略按预期工作,switchyard 端点似乎会导致此问题。
    • 嗨,Burki,我试过你说的。实际上我只是用一个引发 WebServiceQueueException 的 bean 将 (它返回一个 SOAP 错误)更改为现在它可以工作了......那么,这是否意味着如果我们得到这个问题就会发生SOAP 错误? Rgs
    • 在最后一种情况下,我有: 交付尝试:1 捕获:webservicequeues.utilities.WebServiceQueueException:ProcessTaskEx 服务不可用,在前一种情况下,我有:交付尝试:1 捕获:org.apache .camel.CamelException:
    • 我没有模拟错误队列,所以我认为在异常处理中会不会有问题......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2016-06-05
    • 2014-02-25
    • 2011-05-09
    • 2015-02-08
    • 2011-03-27
    相关资源
    最近更新 更多