无法在laravel队列中异步运行作业


Cannot run jobs in asynchronous in laravel queue

我想在php5.5和laravel中异步运行一些任务。我在谷歌上搜索了一下,发现laravel队列可以做这样的事情。我找到了此帮助链接:https://laravel.com/docs/5.1/queues.我已经安装了依赖项:

亚马逊SQS:aws/aws-sdk-php~3.0

Beanstalkd:pda/pheanstalk~3.0

IronMQ:iron-io/iron_mq~2.0 |~4.0

Redis:predis/predis~1.0

我在laravel中添加了队列表。这是我的工作类

class SearchFromSource extends Job implements SelfHandling{
    use InteractsWithQueue, SerializesModels;
    private $provider;
    private $query;
    private $pageToken;
    private $parameters;
    private $needDetails;
    public function __construct()
    {
    }
    public function handle()
    {
        sleep(5);
    }
}

这是我分派工作的地方:

class SearchController extends Controller{
     ...
     public function prepareResults($query, $page, $ip){
        $job = (new SearchFromSource($curVideoProvider,$this->query,$curVideoProvider->getDefaultParameters(),$curPageToken,$curVideoProvider->needDetails()))->onQueue("q1");
        $this->dispatch($job);
        $job2 = (new SearchFromSource($curVideoProvider,$this->query,$curVideoProvider->getDefaultParameters(),$curPageToken,$curVideoProvider->needDetails()))->onQueue("q2");
        $this->dispatch($job2);
    }
}

问题是laravel没有异步运行作业。问题出在哪里。

  1. 首先,您必须在.env文件中定义一个QUEUE_DRIVER(sync、redis、beanstall等)
  2. 然后,您必须有一个队列侦听器在项目目录中运行php artisan queue:listen
  3. 你的工作应该实现shouldQUeue接口