骆驼重试-大量重试会减慢单个交易的重试速度

时间:2018-08-09 08:29:28

标签: apache-camel

我们在项目中使用了骆驼重试。当交易次数/期间很小时,它可以正常工作。

我们的事务是一个ftp进程-有时我们遇到连接问题(服务器已关闭等)-因此我们已配置了特定数量的重试/延迟-之后流量将流向错误处理器。

当有大量事务(例如> 25)失败并且都在同一时间重试循环时-每个事务的重试周期都增加了...每个事务到达都需要更多时间到错误处理器。

我们已经配置了一个重新交付处理器以收集时间统计信息-到目前为止,我们了解的是-

a)每次将其他失败的事务添加到队列中时,事务就会越走越远,等待重试。

b)重试触发每秒发生一次。我们添加了一个Scheduledexecutor服务(为deadletterChannel构建器添加了10个线程)-但是,线程数量并没有增加重试的频率-由于有许多事务在等待重试-期望尽快进行重试交易可以重试,而不必每1秒重试一次。

下面是此蓝图片段

<bean class='org.apache.camel.builder.DeadLetterChannelBuilder"      id="myDeadLetterErrorHandler'>
    <property name="deadLetterUri" value="direct:deadletter"/>
    <property name="redeliveryPolicy" ref="myRedeliveryPolicyConfig"/>
    <property name="executorServiceRef" value="redeliveryThreadPool"/>
    <property name="onRedelivery" ref="redelProcessor"/>  <!-- we have     used this for getting statistics of the retry --->
</bean>
<bean class="org.apache.camel.processor.RedeliveryPolicy" id="myRedeliveryPolicyConfig">
    <property name="maximumRedeliveries" value="${maximum.Redeliveries}"/>
    <property name="redeliveryDelay" value="${redelivery.Delay}"/>
    <property name="asyncDelayedRedelivery" value="true"/>
    <property name="maximumRedeliveryDelay" value="${maximum.RedeliveryDelay}"/>
    <property name="backOffMultiplier" value="0"/>
</bean>
<bean class="java.util.concurrent.ScheduledThreadPoolExecutor" id="redeliveryThreadPool">
    <argument type="int" value="${int}"/>
    <property name="maximumPoolSize" value="${maximum.PoolSize}"/>
</bean

需要输入/建议以在短时间内大量失败的事务处理时如何限制重试延迟

0 个答案:

没有答案