xieyongfa / swoole_jobs
基于swoole的job调度组件,类似于gearman的分布式任务处理系统
v4.2.0
2020-02-23 01:50 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
- symfony/console: ^3.4
Requires (Dev)
- phpunit/phpunit: ^4.8.35 || ^5.7
- v4.2.0
- v4.1.x-dev
- v4.1.5
- v4.1.4
- v4.1.3
- v4.1.2
- v4.1.1
- 4.1.0.x-dev
- v4.1.0
- v4.0.x-dev
- v4.0.2
- v4.0.1
- v4.0.0.x-dev
- v4.0.0
- v3.2
- v3.1
- v3.0.5.1
- v3.0.5
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.6.4.4
- v2.6.4.3
- v2.6.4.2
- v2.6.4.1
- v2.6.4
- v2.6.3.5
- v2.6.3.4
- v2.6.3.3
- v2.6.3.2
- v2.6.3.1
- v2.6.3
- v2.6.2
- v2.6.1
- v2.6.0
- v2.5.7
- v2.5.6
- v2.5.5
- v2.5.4
- v2.5.3.4
- v2.5.3.3
- v2.5.3.2
- v2.5.3.1
- v2.5.3
- v2.5.2
- v2.5.1
- v2.5.0
- v2.4.7
- v2.4.6
- v2.4.5.2
- v2.4.5.1
- v2.4.5
- v2.4.4
- v2.4.3
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.x-dev
- v2.3.6.x-dev
- v2.3.6
- v2.3.5
- v2.3.4
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0.x-dev
- v2.3.0
- v2.2.1
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.1
- v1.0.1
- v1.0.0
- dev-master
- dev-dev
This package is auto-updated.
Last update: 2024-09-20 07:16:36 UTC
README
中文介绍
- 基于swoole的分布式任务处理系统,类似于gearman
- 高性能/动态多worker进程消费队列,加速后端耗时服务
- 无需像gearman worker那样配置crontab,swoole-jobs负责管理所有worker状态
- 支持通过HTTP API(swoole http server)推送队列,不依赖于php-fpm
1. 说明
- 如统计、邮件、短信、图片处理等在Web中较慢的逻辑
- 支持redis/rabbitmq/zeromq或其他任何队列消息存储。
- 比Yii / laravel框架本身更稳定、更快。
- 提供了yii2/phalcon/yaf/ThinkPHP5集成示例,其他框架可以参考src/Action代码。
- yii2 示例
- ThinkPHP5 示例
2. 架构图
3. 特性
-
基于swoole的job调度组件;类似于gearman的分布式任务处理系统;
-
支持redis/rabbitmq/zeromq和其他任何队列消息存储(目前仅支持redis/rabbitmq)。
-
使用swoole进程实现多进程管理,进程数量可配置,worker进程退出后将自动重启。
-
可配置子进程的循环次数,防止业务代码内存泄漏;默认停止命令将等待子进程平稳退出。
-
支持主题特性,不同的job绑定不同的主题;
-
每个主题启动相应数量的子进程,以消除不同主题之间的交互。
-
根据队列积压情况动态启动子进程,可配置最大子进程数量。
-
支持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 ./bin/swoole-jobs.php start
5. 运行方式
5.1 示例
1.edit config.php
2.start service
php ./bin/swoole-jobs.php start >> log/system.log 2>&1
3.push jobs
php ./tests/testJobsSerialzie.php
4.start api server
php ./bin/swoole-jobs.php http start
5.stop api server
php ./bin/swoole-jobs.php http start
5.2 启动参数说明
NAME
- manage swoole-jobs
SYNOPSIS
-php bin/swoole-jobs.php app [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.
-stop
-Wait all running workers smooth exit, please check swoole-jobs status for a while.
-exit
-Kill all running workers and master PIDs.
-http start
-Start swoole http server for apis.
-http stop
-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
#启动服务 sudo systemctl start swoole-jobs.service #重新加载服务 sudo systemctl reload swoole-jobs.service #停止服务 sudo systemctl stop swoole-jobs.service
7. 系统截图
htop
状态
钉钉消息
8. 变更日志
9. 注意事项
- 如果您嵌入自己的框架,可以参考src/Action代码,继承Kcloze\Jobs\Action\BaseAction抽象类。
- 不同的框架服务启动略有不同,具体参考:
example/bin
项目的代码。 - 当swoole >=4版本时,需要设置php.ini,禁用协程
10. 压力测试
- 瓶颈:redis/rabbitmq队列存储本身和作业执行速度
11. 感谢
12. 联系
QQ群:141059677
13. 捐赠
- 如果这个项目真的帮到了您,请点击右上角为该项目点个星。