rogeecn / swoole-jobs
基于swoole的job调度组件,类似于gearman的分布式任务处理系统
v5.0.1
2020-02-17 02:27 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: ^4.3.8
Requires (Dev)
- phpunit/phpunit: ^4.8.35 || ^5.7
- dev-master
- v5.0.1
- v4.1.x-dev
- v4.1.5
- v4.1.4
- v4.1.3
- v4.1.2
- v4.1.1
- 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-dev
- dev-daydaygo-master
This package is auto-updated.
Last update: 2024-09-29 05:35:59 UTC
README
中文介绍
- 分布式任务处理系统,类似于gearman,基于swoole
- 高性能/动态多工作进程消耗队列,加速后端耗时服务
- 无需像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的作业调度组件;类似于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 ./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 stop
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 params
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. 捐赠
- 如果这个项目真的帮助了您,请点击右上角为该项目加星。




