Beanstalk是一个高性能、轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。
安装与配置beanstalkd
安装
从官网下载最新版的源码,当前最新版为 1.10。参考下面命令,编译安装。
| 1 | wget https://github.com/kr/beanstalkd/archive/v1.10.tar.gz | 
上面将 beanstalkd 可执行程序放置在 /usr/local/bin/ 目录下。
启动脚本
下面使用 systemctl 来配置启动脚本。
创建 /lib/systemd/system/beanstalkd.service 文件,写入以下内容(注意相关路径和配置参数):
| 1 | [Unit] | 
安装beanstalkd console
beanstalkd console 是使用 php 语言编写的 beanstalkd 队列控制台程序。
从官网下载 beanstalk_console 安装包 ,下载完解压之后,部署个域名,注意 nginx 绑定的 root 的为 beanstalk_console 的 public 目录,然后修改 config.php 配置,为了安全起见建议启用 Basic Authentication 认证。
| 1 | 
 | 
安装与配置supervisord
安装与基本配置
为了更好地管理 Laravel 相关队列服务进程,推荐使用 supervisord 工具,安装与配置方法如下:
| 1 | yum -y install python-setuptools | 
supervisor 的配置文件放置在 /etc/supervisor/supervisord.conf 中。编辑它,在最后面修改添加上:
| 1 | [include] | 
以后,supervisor 管理的服务进程脚本可以放在 /etc/supervisor/conf.d/ 目录下,以 .conf 后缀名的文件中。
启动与服务脚本
创建 /lib/systemd/system/supervisor.service 文件,写入以下内容:
| 1 | [Unit] | 
然后执行下面命令设置自动开机启动。
| 1 | systemctl enable supervisor.service | 
创建 /etc/init.d/supervisor 脚本,写入以下内容。
| 1 | 
 | 
注意修改上面脚本中 supervisor 配置文件路径(包括 PIDFILE 文件)为你的 supervisor 的配置文件里的相关路径。
然后,修改文件权限为 755,并设置开机启动。
| 1 | chmod 755 /etc/init.d/supervisor | 
后续,你就可以使用下面命令来管理 supervisor 了。
| 1 | service supervisor help | 
更多其它 Linux 发行版开机启动脚本:https://github.com/Supervisor/initscripts 。
安装与配置Laravel
Laravel 安装与使用,这里不做过多赘述,参考社区中文文档。
Laravel 启用 beanstalkd 队列支持,需要依赖 pda/pheanstalk ~3.0 扩展包,请在 composer.json 追加上,然后 composer update 一下。修改 .env 文件,将 QUEUE_DRIVER=sync 由默认的同步 sync 改为 beanstalkd 。
| 1 | QUEUE_DRIVER=beanstalkd | 
现在,你可以编写 supervisor 管理队列服务的脚本了。这里演示了一个名叫 laravel-worker 的 supervisor 进程管理的脚本示例,文件路径为 /etc/supervisor/conf.d/laravel-worker.conf 。
| 1 | [program:laravel-worker] | 
其中 /usr/local/php/bin/php 为服务器中 php 二进制文件的绝对路径,/data/wwwroot/laravel/ 为 Laravel 网站项目的路径,artisan queue:work beanstalkd --sleep=3 --tries=3 --queue=default --daemon 为队列处理器命令参数,它支持传入更多参数,请执行 php artisan queue:work --help 获取。以上参数请根据实际情况修改。
配置完上面,就可以使用 supervisorctl 来启用与重启 laravel-worker 了:
| 1 | supervisorctl reread | 
为了实现队列平滑重启,建议手动运行
php artisan queue:restart命令之后,再重启laravel-worker。
| 1 | php artisan queue:restart | 
 
        