我想了解消费者消息处理尝试间隔时间的限制。例如,假设我有以下AWS Resources
- SQS队列(名为"SQSQueueName1"),配置为向SQSQueueName1DLQ发送死信消息
- SQS队列DLQ (named "SQSQueueName1DLQ")
- Lambda函数(命名为"LambdaName1")
如果SQSQueueName1有一个重驱动策略,MaxRecieveCount设置为10,那么在此场景中,消费者处理此消息的尝试间隔多长时间?我是否能够控制消费者尝试的时间间隔?例如,我是否可以将它们分开,以便在10小时内进行尝试?或者这种控制完全不存在,因此所有控制都委托给lambda轮询器和sqs之间的协商(使用可见性超时+ redrive)?
同样,我的目标是看看在技术上是否有可能将调用之间的时间控制在一定的时间内,比如10个小时。24小时。
SQS队列具有messageVisibilityTimeout
参数,该参数精确控制您想要的内容。它被设置为持续时间,最大值为12小时。在消息被消费者读取后,在messageVisibilityTimeout
期间,该消息对其他任何人都是不可见的。因此,如果您将其设置为10小时,则您的消息只会在10小时后重试。
Lambda触发器与此参数无关。当使用SQS触发Lambda函数时,Lambda对SQS队列执行长轮询,换句话说,不断地请求新消息。但是,无论Lambda向SQS发出多少请求,如果消息不可见,Lambda都不会读取它。