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()