Laravel 5.1 Queue jobs $ this-> gt; delete () не работает

Я использую Laravel 5.1, и он встроен в службу очередей (с драйвером Redis).

слушатель очереди выглядит так:

php artisan queue:listen --tries=5 --delay=60 redis

В самом классе работы я проверяю ответ, и в случае положительного ответа я использую $this->delete() чтобы удалить задание из очереди, но безуспешно, задание по-прежнему срабатывает 5 раз, независимо от того, провалилось оно или нет.

это файл задания, который я использую:

<?php

namespace LM2\Jobs;

use LM2\Http\Controllers\API;
use LM2\Http\Controllers\PredictionsController;
use LM2\Jobs\Job;
use Illuminate\Support\Facades\Log;
use LM2\Http\Controllers\AnalyticsController;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;
use LM2\Models\Client;
use LM2\Models\GoogleIntegration;
use LM2\Models\Lead;

class CompleteLeadAnalyticsDetails extends Job implements SelfHandling, ShouldQueue
{
use InteractsWithQueue, SerializesModels;

const NUMBER_OF_TRIES = 5;

private $lead;
private $client;

public function __construct(Lead $lead, Client $client)
{
$this->lead   = $lead;
$this->client = $client;
}

public function handle(AnalyticsController $analyticsController, API $api,PredictionsController $prediction)
{
Log::info("Inside CompleteLeadAnalyticsDetails::handle()");
$integration = GoogleIntegration::where('client_id', $this->client->id)->first();
if(count($integration) > 0){
if($this->attempts() > 1){
Log::info("CompleteLeadAnalyticsDetails::handle() attempt ".$this->attempts());
$this->release(120);
Log::info("CompleteLeadAnalyticsDetails::handle() released");
}
try{
if(count($this->lead->ga_details) > 1){
return;
}
$res = $analyticsController->getLeadDetails($integration->view_id,$this->lead->ga_details['uacid'],$this->lead->_id,$this->client);
Log::info("Analytics response: ".$res);
Log::info('has $res');
if($res){
if(isset($this->lead->email_sent) && (bool)$this->lead->email_sent){
return;
}else {
$prediction->predict($this->lead, $this->client);
$api->sendLeadEmail($res, $this->client);
$api->forwardToWebService($this->client, $this->lead);
Log::info('email sent');
$this->delete();
return true;
}
}
}catch (\Exception $e){
Log::info('no $res, number of attempts:'.$this->attempts()." for lead id:".$this->lead->_id.' number of Attempts: '.$this->attempts());
if($this->attempts() == self::NUMBER_OF_TRIES){
$api->forwardToWebService($this->client,$this->lead);
$api->sendLeadEmail($this->lead, $this->client);
Log::info('email sent, no $res');
$this->delete();
}
throw new \Exception('No response for lead id '.$this->lead->_id.' is breaking the job??');
return false;
}
}else{
if(isset($this->lead->email_sent) && (bool)$this->lead->email_sent){
return;
}
$api->forwardToWebService($this->client,$this->lead);
$api->sendLeadEmail($this->lead, $this->client);
Log::info("Client ".$this->client->name.', id:'.$this->client->id.' was not integrate with google CompleteLeadAnalyticsDetails on line:62');
$this->delete();
}
return true;
}
}

Кто-нибудь знает, почему это происходит и каково его решение?

Цени любую помощь! 🙂

4

Решение

использовать Illuminate \ Queue \ InteractsWithQueue;

затем внутри класса добавить

использовать InteractsWithQueue;

Это позволит вам сделать эти звонки

0

Другие решения

Я знаю, что это старый поток, но когда я столкнулся с той же проблемой, это было потому, что я забыл запустить очередь с помощью команды php artisan queue:listen, После этого, $this->delete работал.

0

По вопросам рекламы [email protected]