【发布时间】:2021-07-15 13:24:40
【问题描述】:
我正在使用 "aws/aws-sdk-php": "^3.185" 实施 AWS SQS 作业队列。使用队列命令在我的 VPS 上正确处理作业(拉取作业 -> 处理作业 -> 删除作业):
php artisan queue:work
但使用相同的凭证,在 Lambda 环境中,作业完成后无法删除。简而言之,pull job -> process job --X--> delete job。 以下是错误:
"errorType": "Aws\Sqs\Exception\SqsException",
“errorMessage”:“在“https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxx/SQS-TestJob”上执行“DeleteMessage”时出错;AWS HTTP 错误:客户端错误:
POST https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxx/SQS-TestJob导致403 Forbidden响应:\nSender I (truncated...)\n InvalidClientTokenId (client): The security token included in the request is invalid. - <ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/">SenderInvalidClientTokenId请求中包含的安全令牌无效。b28151cc-0c42 -5eec-be57-08a6207db931"
在可见时间(本例中为 30 秒)后,取消删除消息将再次出现。
应用启动时我应该更新令牌吗?
谢谢,
【问题讨论】:
-
我不确定 PHP SDK 中的令牌,但通常您不需要从队列中显式删除消息:“Lambda 轮询队列并与包含的事件同步调用您的 Lambda 函数队列消息。Lambda 分批读取消息并为每个批次调用一次您的函数。当您的函数成功处理一个批次时,Lambda 会从队列中删除其消息。"
-
@OleksiiDonoha 我没有在日志中看到它被删除。它一直存在,并且在可见时间之后可用
-
只有在函数处理完消息成功时才应该删除。尝试删除删除消息的部分功能,看看它是否有效
-
@OleksiiDonoha 它完成了
function handle(),没有任何错误 -
SQS 是触发 lambda 还是您从代码中的 SQS 拉取?
标签: php laravel amazon-web-services amazon-sqs jobs