启动命令

首先执行启动命令要找到当前项目的根目录,我们安装后的php项目根目录在crmeb目录下有think文件

命令

work模式 queue:work

列名的可以去队列配置中查看

php think queue:work --queue 消息队列列名

参数说明

--daemon 是否循环执行,如果不加该参数则该命令处理完下一个消息就退出

--queue 消息队列列名 要处理的队列的名称

--delay 0 如果本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0

--force 系统处于维护状态时,是否仍然处理任务,并未找到相关说明

-memory 128 该进程允许使用的内存上限,以M为单位

--sleep 3 如果队列中无任务则sleep多少秒后重新检查

--tries 2 如果任务已经超过尝试次数上限,则触发“任务尝试数超限”事件,默认为0

Listen模式 queue:listen

php think queue:listen --queue 消息队列列名

参数说明

--queue 消息队列列名 要处理的队列的名称

--delay 0 如果本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0

--sleep 3 如果队列中无任务则sleep多少秒后重新检查

--tries 2 如果任务已经超过尝试次数上限,则触发“任务尝试数超限”事件,默认为0

--timeout 60 工作进程允许执行的最长时间,以秒为单位

两种模式下选择那种模式运行比较好?

Work模式是单进程的处理模式,按照是否设置—daemon参数又可以分为单次执行和循环执行两种模式;

Listen命令是“双进程+管道”的处理模式,Listen命令所在的进程会循环地创建单次执行模式的Work进程,每次创建的Work进程只消费一个消息就会结束,然后Listen进程再创建一个新的Work进程;

Work模式本质上既不能控制进程自身的运行时间;如果在列中增加死循环那么循环不会停止

Listen命令可以限制Listen进程创建的Work进程的最大执行时间;

综合考虑,选择listen模式比较好

项目中启动消息队列

php think queue:listen --queue 消息队列列名

配合Supervisor进行进程守护,可参考消息队列文档