这是另一篇博客文章,介绍了下一个Apache Camel 2.12版本中即将进行的改进和新功能。
在上一个博客中,我谈到了路由直接支持的cron表达式 。 这篇博客文章与之相关,因为我们对轮询路由具有另一个新功能(使用计划的轮询使用者)。
默认情况下,计划的轮询路由将以固定速率(通常每半秒)轮询新消息。 尽管在某些用例中,新消息并非一整天都均匀地到达,但是可能趋向于成批到达。 因此,在没有新消息到达的时间段内,计划的轮询使用者将不会提取新消息,但仍会以相同的速度寻找新消息。
因此,我们引入了一个回退功能,该功能可以让您在没有消息的情况下让计划的轮询使用者检查不那么主动。
为了证明这一点,我们引入了3个新选项
- backoffMultiplier =如果连续出现多个随后的空闲/错误,则使计划的轮询使用者退回 。 乘数就是在下一次实际尝试再次发生之前将被跳过的轮询次数。 使用此选项时,还必须配置backoffIdleThreshold和/或backoffErrorThreshold。
- backoffIdleThreshold =在backoffMultipler踢入之前应进行的后续空闲轮询的数量。
- backoffErrorThreshold =在backoffMultipler插入之前应该发生的后续错误轮询(由于某些错误而失败)的数量。
默认情况下,无论是否有要提取的消息,计划的轮询使用者都是静态的,使用相同的轮询频率。 从Camel 2.12开始,您可以使用退避功能将计划的轮询使用者配置为更加动态。 这使调度程序在空闲时或行中有X个错误时可以跳过N个轮询。 有关backoffXXX选项的更多信息,请参见上表。
例如,要让FTP使用方退回一段时间的空闲时间,可以这样做:
from("ftp://myserver?username=foo&passowrd=secret
?delete=true&delay=5s
&backoffMultiplier=6&backoffIdleThreshold=5")
.to("bean:processFile");
在此示例中,FTP使用者将每5秒轮询一次新的FTP文件。 但是,如果它已经连续5次处于空闲状态,那么它将使用6的倍数进行补偿,这意味着它将改为每5 x 6 = 30秒轮询一次。 当使用者最终获取文件时,退避将重置,使用者将返回并每隔5秒再次轮询一次。
在JMX中,您可以查看退回是否已启动,因为使用者将拥有属性backoffCounter> 0。
您可以在以下位置找到更多详细信息