【发布时间】:2022-01-05 06:26:00
【问题描述】:
过去 3 天我一直在苦苦思考如何在 Laravel 中读取排队的作业负载。
到目前为止我所取得的成就。 调度作业并查看它在 AWS SQS 队列中是否可用。 之后,我为 AWS 执行了侦听器和工作程序来处理排队的作业,我发现它也运行良好。
现在我被困在如何从 AWS SQS 读取 QUEUED 作业负载/消息正文/属性。
如果可能的话,这是我的代码示例,请帮助整个社区的任何人。
<?php
namespace App\Jobs;
use App\CookieXrayConsentLog;
use App\CookieXrayScript;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Queue;
use Illuminate\Support\Facades\Storage;
class QueueCookieConsent implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $job;
// The maximum attempts of this job
public $tries = 5;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(array $data)
{
$this->job = $data;
$this->onConnection('sqs');
$this->onQueue('dev_consent');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
// Tried by these ways
Log::info('job => ' .' This --- '. json_encode(Queue::pop()->payload()));
Log::info('job => ' .' This --- '. json_encode($this->job));
}
}
如果我如上所述从日志信息中删除此 json_encode(),则会打印日志。
【问题讨论】:
-
如读取当前作业的有效负载或读取队列中其他作业的有效负载?
-
当前工作。
-
你应该可以使用
$this->job->payload()访问它。 -
我试过了,但它不起作用。
-
但是你已经覆盖了 $this->job,所以这会失败,而不是说不工作描述它是如何不工作的,你遇到了什么错误。
标签: php laravel amazon-web-services amazon-sqs laravel-queue