【发布时间】:2020-01-11 21:16:42
【问题描述】:
我有一个使用 SQS 的 AWS Elastic Beanstalk Worker Environment 设置。 SQS 正在发布到一个 URL,这是一个使用 Laravel 的代码库的端点。从这个端点,它接收消息并处理有效负载。我的一些过程很耗时,需要 20 多分钟才能完成。我正在从端点发回一个成功响应,但是由于完成该过程需要很长时间,因此大多数情况下,消息将进入 SQS 中的飞行模式。我正在尝试使用 PHP SDK 进行 deleteMessage() 调用,但我需要通过 ReceiptHandle 来删除消息。根据文档here,SQS 没有将ReceiptHandle 发布到我的应用程序中,因此我无法进行删除调用。 inFlight模式下消息的问题是下次会再次调用,所以流程重复。
处理完成后如何删除消息?
我目前的代码如下:
$worker->process(
$request->header('X-Aws-Sqsd-Queue'), $job, [
'maxTries' => 0,
'delay' => 0
]
);
return $this->response([
'Processed ' . $job->getJobId()
]);
worker 是一个实例
Illuminate\Queue\Worker;
response 函数是对数据进行 json 编码并以 200 响应
【问题讨论】:
标签: php laravel amazon-web-services amazon-s3 amazon-ec2