Я хочу запускать некоторые задачи асинхронно в php 5.5 и laravel. Я гуглил и обнаружил, что очередь на Laravel может сделать такую вещь. Я нашел эту ссылку для помощи: https://laravel.com/docs/5.1/queues.
Я установил зависимости:
Amazon SQS: aws / aws-sdk-php ~ 3.0
Beanstalkd: pda / pheanstalk ~ 3.0
IronMQ: iron-io / iron_mq ~ 2.0 | ~ 4.0
Redis: предисловие / предисловие ~ 1.0
и я добавил таблицы очередей в laravel. Вот мой класс Job
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 не выполняет задания асинхронно. В чем проблема.
QUEUE_DRIVER
(Sync, Redis, Beanstalk и т. д.) в вашем файле .env php artisan queue:listen
внутри вашего каталога проекта Других решений пока нет …