Apache Camel - 发生异常时延迟

Apache Camel - Delay when exception occurs

我写了一个 camel 路由来轮询一个文件夹,获取请求,检查服务器上的内存消耗(在 java 文件中)。如果它低于阈值,它会将请求丢弃到 JMS 队列中,否则它会抛出异常并再次选择它进行处理。

我需要做的是,当抛出异常时,我需要将处理延迟一段可配置的时间,比如 15 分钟。这将为服务器提供一些时间来稳定,而不是让它进行不必要的轮询。 我正在使用 camel 的 errorHandler 机制,但它似乎不起作用。 Camle 继续接听请求,没有任何延迟。请帮忙解决这个问题。 下面是包上下文快照:

<camel:onException>
        <camel:exception>java.lang.Exception</camel:exception>
        <camel:redeliveryPolicy backOffMultiplier="500" />
        <camel:log message="Default error handler was called"></camel:log>
    </camel:onException>
            <camel:route>
                <!--  Reading from REST url -->
                <camel:from uri="<my url>" />
                <!--  If else loop -->
                <camel:choice>
                    <camel:when>
                        <camel:xpath>Some path</camel:xpath>
                        <!--  Parsing OrderNumber and OrderVersion-->
                        <camel:log message="Recieved request ${headers.OrderNumber}-${headers.OrderVersion}.xml"/>
                        <camel:setHeader headerName="OrderNumber">
                            <xpath>Some path</xpath>
                        </camel:setHeader>
                        <camel:setHeader headerName="OrderVersion">
                            <camel:xpath>Some path</camel:xpath>
                        </camel:setHeader>
                        <!-- Request being put in file folder -->
                        <to
                            uri="file:data/inbox?fileName=${header.OrderNumber}-${header.OrderVersion}.xml"
                            pattern="InOut" />
                    </camel:when>
                    <!--  For all other requests put on  queue -->
                    <camel:otherwise>
                        <camel:log message="Request ${headers.OrderNumber}-${headers.OrderVersion}.xml directly sent to  queue"/>
                            <to uri="my queue"
                                pattern="InOut" />
                    </camel:otherwise>
                </camel:choice>
            </camel:route>
            <camel:route errorHandlerRef="errorHandler">
            <!-- Route to put message from folder to JMS queue if memory consumption is below limit-->
                <camel:from uri="file:data/inbox"/>
                    <camel:process ref="checkMemoryConsumption"/>
                    <camel:convertBodyTo type="String" />
                    <camel:log message="Sucessfully processing service order ${headers.OrderNumber}-${headers.OrderVersion}.xml"/>
                    <to uri="my queue"
                            pattern="InOut" />
            </camel:route>

您试过 redeliveryDelay 还是 redeliveryPolicyProfile

以下策略配置文件将重试 3 次,每次重试之间有 1000 毫秒的延迟。

<redeliveryPolicyProfile id="myRedeliveryProfile"
        maximumRedeliveries="3"
        redeliveryDelay="1000" allowRedeliveryWhileStopping="false"
        retryAttemptedLogLevel="INFO" />

阅读更多关于here

通过在我的捆绑包上下文(上面显示的捆绑包上下文)中进行以下修改,重新交付策略开始生效并且似乎可以解决问题。