Laravel и AWS SQS, Как считывать полезную нагрузку задания / очередь извлечения?

#php #laravel #amazon-web-services #amazon-sqs #laravel-queue

Вопрос:

Последние 3 дня я размышлял о том, как я могу прочитать полезную нагрузку задания в очереди в Laravel.

Чего я достиг до сих пор. Отправьте задание и убедитесь, что оно доступно в очереди AWS SQS. После этого я выполнил listener и worker для AWS для обработки заданий, поставленных в очередь, и вижу, что он также работает нормально.

Прямо сейчас я застрял на том, как я могу считывать полезную нагрузку / сообщения / атрибуты заданий в очереди из AWS SQS.

Вот мой пример кода, если возможно, чем кто-либо из всего этого сообщества, пожалуйста, помогите мне.

 lt;?php   namespace AppJobs;  use AppCookieXrayConsentLog;  use AppCookieXrayScript;  use CarbonCarbon;  use IlluminateBusQueueable;  use IlluminateQueueSerializesModels;  use IlluminateQueueInteractsWithQueue;  use IlluminateContractsQueueShouldQueue;  use IlluminateFoundationBusDispatchable;  use IlluminateSupportFacadesDB;  use IlluminateSupportFacadesLog;  use IlluminateSupportFacadesQueue;  use IlluminateSupportFacadesStorage;   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-gt;job = $data;  $this-gt;onConnection('sqs');  $this-gt;onQueue('dev_consent');  }   /**  * Execute the job.  *  * @return void  */  public function handle()  {   // Tried by these ways   Log::info('job =gt; ' .' This --- '. json_encode(Queue::pop()-gt;payload()));    Log::info('job =gt; ' .' This --- '. json_encode($this-gt;job));   }  }  

Журналы печатаются, если я удалю этот json_encode() из информации журнала, как упоминалось выше.

Комментарии:

1. Например, прочитать полезную нагрузку для текущего задания или прочитать полезную нагрузку других заданий в очереди?

2. Для текущей работы.

3. Вы должны иметь доступ к нему с помощью $this-gt;job-gt;payload() .

4. Я пробовал это, но это не работает.

5. Но вы перезаписали $this-gt;задание, так что оно завершится неудачей, и вместо того, чтобы сказать «не работает», опишите, как оно не работает, с какой ошибкой вы получаете.

Ответ №1:

В вашем случае вы хотите получить доступ $this-gt;job-gt;payload() , но вы перезаписываете переменную задания в конструкторе этой строкой.

 $this-gt;job = $data;  

Вместо этого переименуйте это во что-нибудь другое.

 $this-gt;data = $data;  

Теперь вы можете получить доступ к полезной нагрузке вот так.

 $this-gt;job-gt;payload()  

Комментарии:

1. Это решило мою проблему, спасибо @mrhn