【发布时间】:2021-05-31 11:06:13
【问题描述】:
我正在使用 Laravel 5.8.38 和 SQS 队列驱动程序向预先存在的应用程序添加功能。
我正在寻找一种在处理队列消息时记录它们的接收句柄的方法,以便我们可以手动从队列中删除出现严重错误的作业的消息(没有接收 ID,我们会必须等待可见性超时)。
我对 Laravel 不是很熟悉,我正在努力解决问题。我们有两种类型的排队作业:
- 实现
Illuminate\Contracts\Queue\ShouldQueue的自定义类,它还使用Illuminate\Queue\InteractsWithQueue、Illuminate\Foundation\Bus\Dispatchable和Illuminate\Bus\Queueable特征(我们的类直接排队) - 一个自定义命令,扩展
Illuminate\Console\Command,通过Illuminate\Foundation\Console\QueuedCommand运行
对于自定义类,浏览InteractsWithQueue 和Illuminate/Queue/Jobs/SqsJob 的源代码,我发现我可以直接访问收据句柄:
$sqsJob = $this->job->getSqsJob();
\Log::info("Processing SQS job {$sqsJob["MessageId"]} with handle {$sqsJob["ReceiptHandle"]}");
这很好用!但是,我无法从控制台命令中弄清楚如何做类似的事情。
Laravel 的QueuedCommand 实现了ShouldQueue 和Illuminate\Bus\Queueable,所以我目前的猜测是我需要扩展它,使用InteractsWithQueue,并从那里检索和记录收据句柄。但是,如果我这样做,我不知道如何修改 Artisan::queue('app:command', $commandOptions); 来代替我的自定义 QueuedCommand 类。
我快到了吗?如果是这样,我如何排队我的自定义 QueuedCommand 类而不是 Laravel 类?或者,有没有更好的方法来做到这一点?
【问题讨论】:
标签: php laravel laravel-5 amazon-sqs