#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