gpt4 book ai didi

php - 处理后从 SQS 队列中删除消息

转载 作者:可可西里 更新时间:2023-11-01 13:41:15 24 4
gpt4 key购买 nike

我的应用程序将消息发送到 AWS SQS 队列以获取需要某种后台处理的作业。我的处理守护进程接收并处理这样的消息:

$result = $sqsClient->receiveMessage([
'QueueUrl' => \Myapp\Config::get('sqs.queue'),
'WaitTimeSeconds' => 20,
'MaxNumberOfMessages' => 1
]);

if (isset($result['Messages'])) {
foreach ($result->getPath('Messages/*/Body') as $messageBody) {
$handler = new \Myapp\Handler();
$handler->dispatch($messageBody);
}
}

这工作正常,但是我可以从 SQS 控制台看到我的脚本检索到的消息被放入“正在运行的消息”类别中,然后在一段时间后它们被放回“可用消息”中,并且我的脚本最终再次拾起它们。

如何从 SQS 队列中删除消息,或者更好地将它们标记为已完成?

最佳答案

当您从 SQS 队列收到消息时,该消息将(默认情况下)在 30 秒后返回到队列。这是为了处理消息处理崩溃并且需要重新处理消息的情况。

成功处理消息后,使用deleteMessage 删除消息。当您从 receiveMessage 收到消息时,您需要消息中的 receiptHandle 值才能删除消息。

如果您的消息的典型处理时间可能超过 30 秒,那么您可以配置队列以增加“返回队列”的时间。这在 SQS 队列配置中称为“默认可见性超时”。

另请注意,Amazon SQS 的工作方式如下:

  1. 与消息添加到队列的方式相比,消息的接收顺序可能是乱序的
  2. 消息可能会收到两次,因此让您的消息处理器处理这些情况

关于php - 处理后从 SQS 队列中删除消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28653178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com