2017-01-17 16 views
0

У меня есть несколько задач, в функции, и я использую транзакцию в функции
Я хочу использовать Redis очередь для этого транзакционных задач
Например у меня есть функция, как показано ниже:
обрабатывать транзакции по очереди REDIS

private function check_destination_delivered($request,$id,$order) 
{ 
    if ($request->get('status') == 'destination_delivered') 
    { 
     $this->destination_verification($request); 
     DB::beginTransaction(); 
     try 
     { 
     $this->calculate_credit($id,$order); 
     $this->calculate_customer_gift_credit($id,$order); 
     DB::commit(); 
     } 
     catch (\Exception $e) 
     { 
     DB::rollback(); 
     return $this->respondUnprocessable(1180,'error', $e); 
     } 
    } 
} 

в этой функции я хочу эту линию

$this->destination_verification($request); 

Выполнить до того сделки начинаются и после того, что этой линии:

$this->calculate_credit($id,$order); 
    $this->calculate_customer_gift_credit($id,$order); 

Использование Redis очередь вычислить через несколько часов и использовать транзакцию каждую задачу в там быть сделано, и если некоторые задачи будут терпеть неудачу .queue запустить снова, пока все задачи не сделать

+0

помогите друзьям – amirali

+0

нет ........? – amirali

ответ

0

исправить его поместить функцию в очереди, как показано ниже:

class CreditJob extends Job implements ShouldQueue 
{ 
use InteractsWithQueue, SerializesModels; 

protected $order; 
protected $trip; 
protected $promotion; 
protected $customer; 

public function __construct($order,Order $trip,Customer $customer, Promotion $promotion) 
{ 
    $this->order = $order; 
    $this->trip = $trip; 
    $this->promotion = $promotion; 
    $this->customer = $customer; 
} 

public function handle() 
{ 
    $retry=0; 
    $notDone=TRUE; 
    DB::beginTransaction(); 
    while($notDone && $retry < 5) 
    { 
     try 
     { 
      $this->calculate_promotion($this->order); 
      $this->calculate_credit($this->order); 
      DB::commit(); 
      $notDone=FALSE; 
     } 
     catch (\Exception $e) 
     { 
      DB::rollback(); 
      $retry++; 
      sleep(30); 
     } 
    } 
    if($retry == 5) 
    { 
     $this->trip->fail_calculate_credit_and_promotion($this->order); 
    } 
} 

} 

Если все задачи не сделали .в цикл очереди работает снова
правильно ли это?

+0

no one ........? – amirali