DynamoDb重新处理记录



我刚刚继承了其他人的代码,该代码使用无服务器lambda函数来处理DynamoDb中的记录。最初的开发人员使用DynamoDb的方式与RabbitMQ的工作方式非常相似;作为一个具有一定容错级别的临时暂存区,以及一个稍后处理它们的lambda函数。

我们目前有一种方法可以延迟我公司RabbitMQ中的消息发布,但AWS方面缺少这一功能。

我在无服务器lambda函数中编写了一些代码,以便它检查一个名为ProcessAfter(UTC DateTime(的特殊属性,并且如果当前UTC日期/时间小于ProcessAfter指定的日期/时间,则有效地跳过处理任何给定DynamoDb记录。然而DynamoDb再也没有给我发过那张唱片。DynamoDb似乎只允许一次处理记录的尝试(不包括内置的异常重试(,所以我一直在尝试实现延迟功能的解决方案。


是否有办法在DynamoDb或我的lambda函数中复制延迟功能,以便跳过消息,然后根据需要经常重新处理,直到延迟结束并成功处理记录?

看起来您正在收听dynamo_db流。它们的工作方式是,如果记录发生任何事件(正在配置的插入、更新等(,它将被发送到侦听器进行处理。

现在讨论您的具体场景,如果您不希望在听后处理记录,您需要有一个SQS来稍后处理它。

我建议更好的架构是增加一个SQS和Lambda。Lambda将监听dynamo_db流事件,将processAfter与Date_Now进行比较以计算延迟,将该延迟添加为delay_seconds,并向SQS发送消息。最后,lambda侦听器将根据需要在指定的延迟或0延迟后侦听并处理它。

最新更新