skphp1989 / swoole-jobs
基于swoole的job调度组件,类似gearman的分布式任务处理系统
v1.0.2
2019-05-21 09:55 UTC
Requires
- php: >=7.0
- ext-redis: *
- ext-swoole: >=1.8.9
- bramus/router: ^1.3
- enqueue/amqp-ext: ^0.8
- guzzlehttp/guzzle: ^6.3
- monolog/monolog: ^1.24
- symfony/console: ^2.7 || ^3.0 || ^4.0
Requires (Dev)
- phpunit/phpunit: ^4.8.35 || ^5.7
This package is auto-updated.
Last update: 2024-09-21 21:32:03 UTC
README
中文介绍
- 基于swoole的分布式任务处理系统,类似gearman
- 高性能/动态多工作进程消费队列,加速后台耗时服务
- 无需像gearman worker一样配置crontab,swoole-jobs负责管理所有工作进程状态
- 支持通过HTTP API(swoole http server)推送队列,不依赖于php-fpm
1. 说明
- 网站中较慢的逻辑,如统计/邮件/短信/图片处理等
- 支持redis/rabbitmq/zeromq或其他任何队列消息存储。
- 比Yii / laravel框架本身更稳定、更快。
- 包含yii2/phalcon/yaf/ThinkPHP5集成示例,其他框架可以参考src/Action代码。
- yii2 示例
- ThinkPHP5 示例
2. 架构图
3. 特点
-
基于swoole的job调度组件;类似gearman的分布式任务处理系统;
-
支持redis/rabbitmq/zeromq和其他任何队列消息存储(目前只支持redis/rabbitmq)。
-
使用swoole进程实现多进程管理,进程数量可配置,工作进程退出后会自动拉起。
-
可配置子进程的循环次数,以防止业务代码的内存泄漏;默认的停止命令会等待子进程平滑退出。
-
支持主题特性,不同的作业绑定不同的主题;
-
每个主题启动相应数量的子进程以消除不同主题之间的交互。
-
根据队列的积压量动态启动子进程,并可以配置最大的子进程数量。
-
支持composer,可以与任何框架集成;
-
日志文件自动切割,默认最大100M,最多5个日志文件,防止日志刷满磁盘;
-
支持队列,支持钉钉机器人等消息提醒。
4. 安装
4.1 composer
git clone https://github.com/kcloze/swoole-jobs.git
cd swoole-jobs
composer install
4.2 docker
- git clone https://github.com/kcloze/swoole-jobs.git
- 进入swoole-jobs目录并运行composer install
- 基于根目录的Dockerfile构建镜像
- docker build -t swoole-jobs .
- docker run -it -v ~/data/code/php:/data swoole-jobs /bin/bash
- 进入docker容器后,进入项目目录:php swoole-jobs.php start
5. 运行方法
5.1 示例
1.edit config.php
2.start service
php ./swoole-jobs.php start >> log/system.log 2>&1
3.push jobs
php ./tests/testJobsSerialzie.php
4.start api server
php ./swoole-jobs.php start http
5.stop api server
php ./swoole-jobs.php stop http
5.2 启动参数说明
NAME
php swoole-jobs - manage swoole-jobs
SYNOPSIS
php swoole-jobs command [options]
Manage swoole-jobs daemons.
WORKFLOWS
help [command]
Show this help, or workflow help for command.
restart
Stop, then start swoole-jobs master and workers.
start
Start swoole-jobs master and workers.
start http
Start swoole http server for apis.
stop
Wait all running workers smooth exit, please check swoole-jobs status for a while.
stop http
Stop swoole http server for api.
exit
Kill all running workers and master PIDs.
exit http
Stop swoole http server for api.
5.3 API参数说明
5.3.1 API URL
5.3.2 API参数
6. 服务管理
有两种方法可以在线启动和关闭服务
6.1 将启动脚本添加到crontab定时任务中,每分钟执行一次(swoole-jobs会自动检查是否正在执行,避免重复启动)。
* * * * * /usr/local/bin/php /***/swoole-jobs.php start >> /***/log/system.log 2>&1
6.2 使用SYSTEMd管理(故障重启,开机启动)
1. According to your own project path, modify: docs/systemd/swoole-jobs.service
2. sudo cp -f systemd/swoole-jobs.service /etc/systemd/system/
3. sudo systemctl --system daemon-reload
4. Service management
#start service
sudo systemctl start swoole-jobs.service
#reload service
sudo systemctl reload swoole-jobs.service
#stop service
sudo systemctl stop swoole-jobs.service
7. 系统截图
htop
状态
钉钉消息
8. 更新日志
9. 注意事项
- 如果您嵌入自己的框架,可以参考src/Action代码以继承抽象类Kcloze\Jobs\Action\BaseAction。
- 各种框架的服务启动会有所不同,具体参考:
example/bin项目的代码。
10. 压力测试
- 瓶颈:redis/rabbitmq 队列存储本身和任务执行速度
11. 感谢
12. 联系方式
QQ群:141059677
13. 捐赠
- 如果这个项目真的对您有帮助,请点击右上角为它点个赞。




