Laravel 和 AWS SQS,如何读取作业负载/检索队列?
Laravel and AWS SQS, How to read job payload / retrieve queue?
过去 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 = $data;
而是将其重命名为其他名称。
$this->data = $data;
现在您可以像这样访问负载了。
$this->job->payload()
过去 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 = $data;
而是将其重命名为其他名称。
$this->data = $data;
现在您可以像这样访问负载了。
$this->job->payload()