我有一个图书馆,它会导入很多图像,并且我正在尝试使用Laravel后台作业。对于排队的工作,我正在关注Laravel文档。
第一个(创建表):
php artisan queue:table
php artisan migrate
然后在.env文件中为Redis配置:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=43216
创建工作:
php artisan make:job CarsJob
CarsJob:
public function handle()
{
$cars = new CarsLibrary();
$CarsLibrary->importAll();
}
通过控制器中的某些操作分派作业:
首先,我尝试过:
$importCarsJob = (new ImportCarsJob())->onQueue('import_cars');
$this->dispatch($importCarsJob );
我尝试过的第二件事:
$importCarsJob = new importCarsJob();
$this->dispatch($importCarsJob);
我已在托管中启用Redis。它是共享托管。
如果我访问URL,则会看到此作业不在后台,因为它需要一分钟以上的时间才能完成请求。
编辑:
env
文件在上方,这是config/queue.php
:
'connections' => [
'sync' => [
'driver' => 'redis',
],
... other drivers like beanstalkd
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
],
],
REDIS_QUEUE
文件中没有env
。答案 0 :(得分:2)
似乎您没有将config/queue.php
中的队列连接从sync
更新为redis
(或环境变量QUEUE_CONNECTION
)。 sync
驱动程序将立即执行作业,而无需将其推送到队列中。
顺便说一句,如果使用redis队列驱动程序,则不需要队列数据库表。