Apache camel ApacheCamel-发生异常时的延迟
我已经编写了一个camel路由,它轮询一个文件夹,接收请求,检查服务器上的内存消耗(在java文件中)。如果低于阈值,则将请求丢弃到JMS队列上,否则将抛出异常并再次拾取以进行处理 我需要做的是,当抛出异常时,我需要将处理延迟一段可配置的时间,比如15分钟。这将给服务器一些时间来稳定,而不是不必要地保持轮询。 我正在使用camel的errorHandler机制,但它似乎不起作用。卡米尔毫不迟疑地继续接受请求。请帮助解决这个问题。 以下是捆绑包上下文快照:Apache camel ApacheCamel-发生异常时的延迟,apache-camel,Apache Camel,我已经编写了一个camel路由,它轮询一个文件夹,接收请求,检查服务器上的内存消耗(在java文件中)。如果低于阈值,则将请求丢弃到JMS队列上,否则将抛出异常并再次拾取以进行处理 我需要做的是,当抛出异常时,我需要将处理延迟一段可配置的时间,比如15分钟。这将给服务器一些时间来稳定,而不是不必要地保持轮询。 我正在使用camel的errorHandler机制,但它似乎不起作用。卡米尔毫不迟疑地继续接受请求。请帮助解决这个问题。 以下是捆绑包上下文快照: <camel:onExceptio
<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>
java.lang.Exception
某条路
某条路
某条路
您是否尝试了重新交付policyprofile
的重新交付版本
下面的策略配置文件将重试3次,每次重试之间的延迟为1000毫秒
<redeliveryPolicyProfile id="myRedeliveryProfile"
maximumRedeliveries="3"
redeliveryDelay="1000" allowRedeliveryWhileStopping="false"
retryAttemptedLogLevel="INFO" />
通过在我的捆绑包上下文(上面显示的捆绑包上下文)中进行以下修改,阅读更多关于的内容,重新交付策略开始生效,似乎起到了作用。
如果出现错误,您可以使用Backoff乘数在稍后进行投票-正如克劳斯所指出的那样,使用Backoff乘数。谢谢您的建议。我添加了一个异常处理,并尝试在其中配置backoffMultiplier,但仍然遇到相同的问题。投票无休止地进行,毫不拖延。java.lang.Exception。我也发布了更新的捆绑包上下文。请让我知道我在这里遗漏了什么。不,关于消费者,请参阅@Claus Ibsen-是不是maximumRedeliveries和redeliveryDelay齐头并进?正如您在我的案例中所看到的,我希望对请求进行轮询,直到其成功处理,并且没有在我的路线中指定最大重新交付,只有延迟。然而,由于这种延迟机制也不起作用。只有当我定义maximumRedeliveries和redeliveryDelay时,延迟才生效。我尝试了redeliveryPolicy“骆驼:redeliveryPolicy”。我犯的错误是,我没有包括“maximumRedeliveries”,因为在我的案例中,我希望重试,只要请求没有得到处理,并且没有特定的次数。现在,我已经添加了这个标签,它似乎工作。谢谢你的建议。