当前位置: 首页 > 知识库问答 >
问题:

如何将SQS消息的消费者/lambda处理的重试间隔为10小时

松和璧
2023-03-14

我想了解消费者信息处理尝试间隔时间的限制。例如,假设我有以下AWS资源

  • SQS队列(名为SQSQueueName1)w/reDrive配置为发送死信消息到SQSQueueName1DLQ
  • SQS队列DLQ(名为SQSQueueName1DLQ)
  • Lambda函数(名为LambdaName1)

如果SQSQueueName1有一个重置策略,MaxRecieveCount设置为10,在这种情况下,消费者处理此消息的尝试间隔多长时间?我是否可以控制消费者尝试之间的时间间隔?例如,我可以将它们分开,以便在10小时内进行尝试吗?或者这个控制完全不存在,以至于所有的控制都委托给lambda轮询器和sqs之间的协商(使用可见性超时重新驱动)?

同样,我的目标是看看在技术上是否有可能将调用之间的时间控制在一个设定的时间量,比如10小时。24小时。

共有1个答案

翟鸿振
2023-03-14

SQS队列具有MessageVisibilityTimeout参数,该参数精确地控制您想要的内容。它被设置为持续时间,最大值为12小时。消费者读取消息后,在MessageVisibilityTimeout期间,该消息将对其他人不可见。所以如果你设置为10小时,你的消息只会在10小时后重试。

Lambda触发器与此参数完全无关。当您用SQS触发Lambda函数时,Lambda会对SQS队列进行长轮询,换句话说,会不断请求新消息。但是,无论Lambda向SQS发出多少请求,如果消息不可见,Lambda都不会读取它。

 类似资料:
  • 在我的Spring启动应用程序中,我有kafka消费者类,每当主题中有可用消息时,它会频繁读取消息。我想限制消费者每隔2小时消费一次消息。就像阅读完一条消息后,消费者将暂停2小时,然后再消费另一条消息。这是我的消费者配置方法:- 然后我创建了这个容器方法,在其中我设置了kafka配置的其余部分 使用此代码分区每2小时重新平衡一次,但它根本没有读取消息。我的kafka消费者方法:-

  • 我对RabbitMQ很陌生,所以如果我的问题听起来很琐碎,请原谅。我想在RabbitMQ上发布消息,它将由RabbitMQ消费者处理。 我的消费者机器是一个多核机器(最好是azure上的工作者角色)。但QueueBasicConsumer一次推送一条消息。我如何编程来利用我可以同时处理多个消息的所有核心。 一种解决方案是在多个线程中打开多个通道,然后在那里处理消息。但在这种情况下,我将如何决定线程

  • 我正在查看关于使用Quarkus从SQS消费的指南。 问题是我想在无休止的循环中执行它,例如每10秒获取一次新消息,并使用Hibernate Reactive从消息中插入一些数据到数据库中。 我创建了一个Quarkus调度程序,但由于它不支持返回Uni,我不得不阻止Hibernate Responsive的响应,因此出现了这个错误 使用Quarkus和reactive实现我所需的最佳方法是什么?

  • 主要内容:1 并发消费重试,1.1 失败重试,1.2 超时重试,2 顺序消费重试,2.1 失败重试,2.2 超时重试,3 broker处理回退请求,3.1 asyncConsumerSendMsgBack处理回退请求,3.2 handleRetryAndDLQ处理重试和死信消息基于RocketMQ release-4.9.3,深入的介绍了DefaultMQPushConsumer消费者重试消息和死信消息源码。 消费重试:并发消费和顺序消费对于消费失败的消息均会有消息重试机制。 1 并发消费重试

  • 高层体系结构 JMS(生产者/消费者)<---->Artemis(STOMP)<---->Websocket-Broker-Relay-Service<---->STOMP-over-Websocket-client(生产者/消费者)

  • 目前我正在使用SQS-Lambda集成 Lambda的并发可用。SQS批次设置为1记录,0延迟。 SQS的可见性超时为15分钟,Lambda最大执行时间为15分钟 我会注意到,有时SQS消息在飞行中被卡住,根本没有被任何Lambda处理(它们在15分钟后落入死信队列,CloudWatch显示没有Lambda被消息调用) 有人面临过同样的问题吗? 我在VPC内部运行Lambda,如果这很重要的话