【问题标题】:Laravel and AWS SQS, How to read job payload / retrieve queue?Laravel 和 AWS SQS,如何读取作业负载/检索队列?
【发布时间】: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-&gt;job-&gt;payload()访问它。
  • 我试过了,但它不起作用。
  • 但是你已经覆盖了 $this->job,所以这会失败,而不是说不工作描述它是如何不工作的,你遇到了什么错误。

标签: php laravel amazon-web-services amazon-sqs laravel-queue


【解决方案1】:

在您的情况下,您想访问 $this-&gt;job-&gt;payload(),但您正在使用这一行覆盖构造函数中的作业变量。

$this->job = $data;

改为将其重命名为其他名称。

$this->data = $data;

现在您可以像这样访问有效负载。

$this->job->payload()

【讨论】:

  • 这解决了我的问题,谢谢@mrhn
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 2018-08-16
  • 2018-09-24
  • 2019-11-07
相关资源
最近更新 更多