【发布时间】:2016-04-29 09:18:51
【问题描述】:
据我了解,如果我发送 200 OK 标头,订阅 SQS 队列的 AWS 弹性 beanstalk Worker 应该会自动删除消息。
工作环境中的 Web 应用程序应该只监听 本地主机。当工作环境中的 Web 应用程序返回时 一个 200 OK 响应以确认它已收到并成功 处理了请求后,守护进程发送一个 DeleteMessage 调用到 SQS 队列,以便将消息从队列中删除。 (SQS 自动删除已在队列中较长时间的消息 比配置的 RetentionPeriod。)如果应用程序返回任何 响应不是 200 OK,然后 Elastic Beanstalk 等待将 配置 VisibilityTimeout 后消息返回队列 时期。如果没有响应,则 Elastic Beanstalk 等待放置 消息在 InactivityTimeout 周期后返回队列中,所以 该消息可用于再次尝试处理。
但我的并没有这样做。他们正在处理好并将他们正在编码的视频保存到正确的 S3 存储桶中。但他们并没有像应有的那样删除队列项。
我尝试过以各种方式发送标头,包括...
http_response_code(200);
header("HTTP/1.1 200 OK");
header("HTTP/1.1 200 OK", true, 200);
我在页面上没有输出,但尝试调用 ob_start();在开始和 ob_end_flush();在发送标头之后,甚至尝试在任何处理之前一开始就做标头。没有任何效果,消息仍在传输中,并在其可见性超时结束后重新传递。
我想不出任何其他方法来删除这些消息 - 工作人员(我认为)只接收消息正文,因此我什至无法自行处理并通过其处理程序使用 API 删除消息。
救命!
谢谢。
【问题讨论】:
-
你是拉消息还是推送消息给你?
-
你好数据。它们被守护进程推送给工作人员,我用 $postBody = file_get_contents('php://input'); 接收它们
标签: amazon-web-services amazon-ec2 aws-sdk amazon-sqs