Laravel作业在队列

时间:2017-06-11 08:04:59

标签: php laravel

嗨,我的工作如下:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

use Timeline\Timeline;

class testQueue implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(Timeline $timeline, $tag)
    {
        $tagData = $timeline->getTagFeed($tag)->getRankedItems();

        if ($tagData) {
            echo "boom";
        }    
    }
}

我通过以下路线运行它:

Route::get('/queue', function () {
    $timeline= new Timeline();

    $timeline->login("test", "testpwd");
    Queue::later(5, new testQueue($timeline, "Testtag"));
});

然后在命令行上我跑了:

php artisan queue:listen database

但是,一个作业运行255次而不是1次并成功退出。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

documentation州:

  

二进制数据,例如原始图像内容,应该通过   base64_encode函数在传递给排队作业之前。除此以外,   放置在JSON上时,作业可能无法正确序列化为JSON   队列中。

因此,您不应该在对话中使用public function handle(Timeline $timeline, $tag)(或public function handle(Instagram $currentInstagram, $tag),因为时间轴或其他内容是二进制数据。

答案 1 :(得分:0)

执行后删除作业。