Laravel 队列 - 记住属性状态?

I'l*_*ack 6 php laravel laravel-5 laravel-5.4

如果作业失败,它将被推回队列。有没有办法在再次处理作业时记住作业类中的属性值?

例如:

class MailJob extends Job
{
    public $tries = 3;

    public $status;


    public function __construct()
    {
        $this->status = false; // set to false
    }


    /**
     * Execute the job.
     */
    public function handle()
    {
        $this->status = true;
        // Assume job has failed, it went back to the Queue.
        // status should be true when this job start processing again
    }
}
Run Code Online (Sandbox Code Playgroud)

Man*_*eri 2

如果您想在同一时刻再次重新运行失败的进程。你可以做这样的事情。

这里,重新运行作业时对象位于内存中,因此数据可用。

我还没有通过运行来验证它,但希望它能起作用

class MailJob extends Job{
public $tries = 3;
public $status;


public function __construct()
{
    $this->status = false; // set to false
}


/**
 * Execute the job.
 */
public function handle()
{
    $this->status = true;
    // Assume job has failed, it went back to the Queue.
    // status should be true when this job start processing again

    $failed = processFailedisConfirm();

    if $failed == true && $this->tries > -1 {
         $this->tries = $this->tries - 1;
         $this->handel();
    }
}}
Run Code Online (Sandbox Code Playgroud)

processFailedisConfirm 的示例可以是

public function processFailedisConfirm(){

     // Core Process to be done in the Job
     $state = (Do Some Api Call); // Here just example, you may send email
                                  // Or can do the core Job Process
                                  // And depending on the Response of the 
                                  // Process return true or false

     // Is Job failed or not ?
     if ( $state == "200" ){
     return false; // Job is not failed
     } else {
     return true; // Job is failed
}
Run Code Online (Sandbox Code Playgroud)

进程逻辑是否失败取决于您正在执行的操作。当我进行 api 调用时,如果我得到 200 的响应,我的过程就成功了。否则进程失败。这只是一个例子,不同的 api 的成功响应可能会因 api 设计者的设计而有所不同。