到期后如何刷新aws kinesis迭代器?

问题描述 投票:2回答:1

在我的spring boot(1.5.7)应用程序中,我正在使用骆驼运动学组件从运动学流中读取数据。我已将迭代器类型设置为“最新”,如下所示

@Override
public void configure() throws Exception {
    from("aws-kinesis://"+stream+"?amazonKinesisClient=#awsClient&iteratorType="LATEST")
            .bean(Settlement.class, "transform")
            .to("log:out");

}

虽然从运动学流中连续读取,但是没有问题。但是,当由于处理过程中的错误而在处理消息时有一些延迟,并且该延迟间隔超过5分钟时,我将收到ExpiredIteratorException错误,如下所示

om.amazonaws.services.kinesis.model.ExpiredIteratorException: Iterator expired. The iterator was created at time Mon Nov 27 15:30:29 UTC 2017 while right now it is Mon Nov 27 15:36:13 UTC 2017 which is further in the future than the tolerated delay of 300000 milliseconds. (Service: AmazonKinesis; Status Code: 400; Error Code: ExpiredIteratorException; Request ID: c655b6d8-58f4-c087-94c3-85f5e7cfdd03)

我已经尝试在骆驼版本2.20.1和2.20.0中使用它。有什么方法可以刷新迭代器吗?或任何其他更好的解决方案来克服此问题,这样我就可以阅读流中的下一条消息。

amazon-web-services spring-boot apache-camel amazon-kinesis
1个回答
0
投票

您可以使用subscribe_to_shard提供ConsumerARNShardIdpositionsequence number作为参数,以在迭代器在300000毫秒内到期时再次重新连接至分片。

© www.soinside.com 2019 - 2024. All rights reserved.