本帖最后由 千帆开发陈余邹 于 2018-6-27 21:53 编辑
消息队列的使用场景:异步处理,应用解耦,流量削锋和消息通讯等场景。使用消息队列可以直接提高系统的响应速度和吞吐率,从而提高整个系统的稳定性。
基于yii2-queue组件,底层存储支持DB, Redis, RabbitMQ, Beanstalk and Gearman。目前我们内部使用的Redis,3.3版本新引入了Beanstalk。目前大部分任务依然执行在Redis队列中。
查看队列的使用情况:
php yii queue/info 查看redis队列- Jobs
- - waiting: 0
- - delayed: 1
- - reserved: 0
- - done: 367
- Workers
- - queue.qianfan-version.worker.1: 127.0.0.1:13819
- - queue.qianfan-version.worker.2: 127.0.0.1:13827
- - queue.qianfan-version.worker.3: 127.0.0.1:13828
复制代码
php yii bqueue/info 查看beanstalk队列
- Statistical information about the tube:
- - name: queue.qianfan-version
- - current-jobs-urgent: 0
- - current-jobs-ready: 0 # 等待任务数
- - current-jobs-reserved: 0 # 正在处理的任务数
- - current-jobs-delayed: 7 # 延迟任务数
- - current-jobs-buried: 0 # 预留任务数
- - total-jobs: 106 # 总计任务数
- - current-using: 0
- - current-watching: 6
- - current-waiting: 6
- - cmd-delete: 99 # 执行删除命令次数,任务执行成功后会被删除
- - cmd-pause-tube: 0
- - pause: 0
- - pause-time-left: 0
复制代码
我们使用作者推荐的supervisord程序监控php的worker进程。suvervisord的配置文件/etc/supervisord.conf。打开文件上面都是默认配置,我们只需要关心最后一行的配置
- [include]
- files = /home/sapi_queue_conf/*.ini ; 需要监控的所有worker进程的配置文件
复制代码 目前我们的所有worker的配置文件都在在/home/sapi_queue_conf目录下。
随便打开一个worker的配置文件
- [program:qianfan-queue-1]
- command=/usr/local/php/bin/php /home/www/sapi/yii queue/listen -v ;启动脚本
- user = root
- autostart=true
- autorestart=true
- startsecs=5 ; 启动几秒后没有错误就认为启动成功了
- startretries=100
- stdout_logfile=/var/log/workers/qianfan-queue-1-stdout.log ; 输出流的日志路径
- stdout_logfile_maxbytes=10MB
- stdout_logfile_backups=10
- stdout_capture_maxbytes=10MB
复制代码
最常使用的命令:
supervisorctl status 查看worker进程状态
supervisorctl reload 重载配置并重启全部队列
supervisorctl start all 启动全部worker
supervisorctl stop all 停止全部worker
supervisorctl start xxx 启动指定的worker
supervisorctl stop xxx 停止指定的worker
Beanstalk
https://github.com/kr/beanstalkd github地址
https://www.jianshu.com/p/21770178ff2b https://my.oschina.net/u/698121/blog/157092 教程
https://www.imooc.com/learn/912 视频教程
https://github.com/xuri/aurora web 管理工具go语言
https://github.com/mnapoli/phpBeanstalkdAdmin web管理工具php语言
Supervisor
http://supervisord.org 官网
https://github.com/Supervisor/supervisor github地址
http://www.ttlsa.com/linux/using-supervisor-control-program 教程
生产者消费者模型
AMQP协议
其他常用的队列系统:Kafka/ZeroMQ/AcitveMQ/RocketMQ/Celery
|