Laradock 中如何使用 queue - daniel-qa/Laradock GitHub Wiki
設定範例
- 1. ies3-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/artisan queue:work schedule:run --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
numprocs=8
user=laradock
redirect_stderr=true
- Command 說明
command=php /var/www/artisan queue:work schedule:run --sleep=3 --tries=3 --daemon
这是要在 Supervisor中运行的命令。
它告诉 Supervisor 启动 Laravel队列处理器,并执行queue:work schedule:run命令。--sleep=3
表示每个任务处理后,进程会休眠3秒,
--tries=3表示在任务失败的情况下,最多会尝试处理3次,
--daemon表示以守护进程(daemon)模式运行,即在后台持续运行。
- 2. laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
##command=php /var/www/coreapi/index.php jobs workers --sleep=3 --tries=3 --daemon
command=php /var/www/coreapi/index.php jobs workers
autostart=true
autorestart=true
numprocs=1
user=laradock
redirect_stderr=true
在 Laradock 中,Queue 的运作主要是通过 Laravel 提供的队列服务来实现的。Laradock 是一个 Docker 容器环境,它为 Laravel 应用程序提供了一个本地开发和部署环境。下面是 Laradock 中 Queue 是如何工作的基本步骤:
配置队列驱动程序:
在 Laradock 中,你需要在 Laravel 应用程序的 .env 文件中配置队列驱动程序。
Laravel 支持多种队列驱动程序,包括数据库(database)、Redis(redis)、Beanstalkd(beanstalkd)等。
你可以根据需求选择适合的驱动程序。
在 .env 文件中设置 QUEUE_CONNECTION 变量来指定使用的队列驱动程序。
启动队列处理器:
Laradock 中通常会有一个专门的容器用于运行队列处理器,一般命名为 php-worker。这个容器中会运行一个后台的队列处理器,例如 Laravel 中的 php artisan queue:work 命令。这个处理器会不断地监听队列中是否有任务需要处理,并在任务到来时执行相应的任务逻辑。
将任务添加到队列:
在 Laravel 应用程序中,你可以使用 queue 方法将需要异步处理的任务添加到队列中。任务一般是以类的形式定义的,该类需要包含 handle 方法用于执行具体的任务逻辑。使用 dispatch 方法将任务实例添加到队列,如 MyJob::dispatch($data)。
队列处理:
一旦任务被添加到队列中,队列处理器(即运行在 php-worker 容器中的队列 worker)就会监听队列,并在有新任务到来时从队列中取出任务并执行 handle 方法中定义的任务逻辑。
完成任务:
当任务逻辑执行完毕后,队列处理器会将任务标记为已完成,并将任务从队列中移除。如果任务执行失败,可以根据配置的重试次数和延迟时间重新尝试执行任务。
- 总结:
在 Laradock 中,队列是通过 Laravel 的队列服务实现的。你需要配置队列驱动程序,并在一个专门的容器中运行队列处理器(php-worker)。将需要异步处理的任务添加到队列中,然后队列处理器会不断监听队列并执行任务。
这种方式可以让你的 Laravel 应用程序更高效地处理耗时或复杂的任务,并提高应用程序的性能和响应速度。