2016-04-06 113 views
4

我使用Laravel 5.1,它內置Queue服務(使用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; 
    } 
} 

任何人都知道爲什麼,它的發生,什麼是它的解決方案嗎?

感謝任何幫助! :)

+0

有人嗎?請...? – benjah

回答

0

use Illuminate \ Queue \ InteractsWithQueue;

然後在類中添加

使用InteractsWithQueue;

這將讓你做出這些調用

+0

我已經在使用它...:/ – benjah

+0

請發佈整個工作文件 – johnpaulmedina

+0

我已經編輯了問題隊友。 – benjah

0

我知道這是舊線,但是當我遇到同樣的問題,這是怎麼一回事,因爲我忘了用命令php artisan queue:listen啓動隊列。之後,$this->delete工作。