日常队列使用小结,推荐使用supervisor驱动

laravel-queue

说明

  1. 队列配置文件存放在 config/queue.php。
  2. 每一种队列驱动的配置都可以在该文件中找到, 包括数据库, Beanstalkd, Amazon SQS, Redis, 以及同步(本地使用)驱动。
  3. 其中还包含了一个null队列驱动用于那些放弃队列的任务。

使用databse驱动

  1. 修改 .env 中的配置项 QUEUE_DRIVERdatabase
  2. 首先要创建数据表来存储任务,php artisan queue:table php artisan migrate
  3. 创建 job 文件, php artisan make:job SendReminderEmail
  4. 在 Controller 层 $this->dispatch(new SendRemindEmail()) 生产队列,于是 database jobs 中记录了最新添加的队列任务
  5. 单一消费队列 php artisan queue:work
  6. 依次消费所有队列 php artisan queue:listen

使用beanstalkd驱动

  1. 安装 beanstalkd: sudo apt-get install beanstalkd
  2. service beanstalkd start
  3. /usr/bin/beanstalkd -l 127.0.0.1 -p 11300
  4. 安装其依赖扩展包 composer require pda/pheanstalk
  5. 依然修改 .env中的配置项 QUEUE_DRIVERbeanstalkd
  6. 生产队列后的数据存储在内存中,消费者直接从内存中获取数据消费掉,其命令同上介绍。
  7. 安装beanstalk-console,如果使用composer 可执行 composer create-project ptrofimov/beanstalk_console -s dev,如果使用laradock 可直接 docker-composer up -d beanstalk-console

使用supervisor驱动

  1. 安装 supervisor: sudo apt-get install supervisor, 也可以去官网下载最新稳定版本
  2. 编辑新的配置文件 cd /etc/supervisor/conf.d/demo.conf,配置项模板如下
  3. 重新读取新的配置文件执行 sudo supervisorctl reread sudo supervisorctl update
  4. 启动对应配置项worker执行 sudo supervisorctl start demo:*
1
2
3
4
5
6
7
8
[program:demo]
process_name=%(program_name)s_%(process_num)02d
command=php /your-project-path/artisan queue:listen --tries=3
autostart=true
autorestart=true
numprocs=8
redirect_stderr=true
stdout_logfile=/your-project-path/storage/logs/worker.log