当一个文件被添加到我的S3存储桶中时,会触发一个S3PUT事件,将一条消息放入SQS。我已经配置了一个Lambda,一旦有消息可用,它就会被触发。
在lambda函数中,我发送了一个API请求,以在ECS Fargate容器上运行一个任务,其中包含从SQS接收的消息的环境变量。在容器中,我使用消息从S3下载文件,进行处理,如果处理成功,我希望从SQS中删除消息。
然而,在我的lambda执行后,消息会自动从SQS中删除。有什么方法可以配置lambda不自动删除SQS消息(除了引发异常并故意使lambda失败),以便我可以通过编程从我的容器中删除消息?
更新:考虑这个场景,我希望实现。
只有当我故意在lambda上提出异常,并且我正在寻找一个类似的解决方案而不这样做时,这一切目前才有效。
只要SQS被配置为Lambda触发器,一旦函数返回(即完成执行),消息就会自动删除。
在我看来,要实现你所描述的行为,你有四个选择:
使现代化
根据提供的新信息,您还有另一个选择:
保持事件流不变,让Lambda删除SQS中的消息。然后,在您的ECS任务中,处理失败状态,并在SQS中放入具有相同有效负载/主体的新消息。这将允许您无限期重试。
没有理由说SQS消息必须完全相同,您感兴趣的是主体/负载。
您可能需要考虑添加一种机制来设置这些重试的限制,并将消息发送到DLQ。
但我的却不是这样。他们正在处理OK,并将正在编码的视频保存到正确的S3存储桶中。但它们没有像应该的那样删除队列项。 我试过用各种方法发送报头,包括... 我在页面上没有输出,但尝试调用了ob_start();在起始和ob_end_flush()处;在发送报头之后,甚至尝试在任何处理之前一开始就直接执行报头。没有任何工作,消息仍然在飞行中,并在其可见性超时结束后重新传递。 救命啊! 多谢了。
这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无
我最近将一台服务器从ActiveMQ从5.8升级到了最新版本(5.11.1)。从那以后,我偶尔注意到,消息将在特定队列中累积,而不会被删除。 我们的架构有一个生产者,一个消费者。我可以看到消费者仍然保持联系,但制作人的信息越来越多。我的解决方案是通过web控制台删除队列。之后,我立即看到消费者重新连接,消息再次开始处理。 如果相关,在这种情况下,生产者正在运行NMS。NET和消费者在Java 1.
我有一系列来自SQS队列事件触发器的AWS Lambdas。但是,有时当我试图从队列中删除消息时,尝试会一次又一次地超时,直到我的Lambda超时发生。 我启用了调试日志记录,确认这是套接字超时,但除此之外,我没有得到任何进一步的详细信息。这似乎也是不规则的。起初,我认为这是一个Lambda预热问题,但在成功运行Lambda多次并在第一次部署时,我发现了这个问题。 到目前为止,我所尝试的: 我想也
如何从weblogic JMS队列中清除/删除消息 我的是一个集群环境,在服务中使用。 获取以下异常。
是否需要删除/清除Azure门户中Azure服务总线队列中的活动/死信消息?目前,我们已经向队列发送了几条消息,而活动消息和一些死信消息都无缘无故地保留在那里,并且我们的服务总线用户没有以某种方式触发,因此我们希望删除这些消息,以使队列再次干净。为了等到服务总线在过期后丢弃这些消息,我们可以自己手动删除它们吗?