strack/jobs

此包已 废弃 且不再维护。未建议替代包。

基于swoole的job调度组件,类似gearman的分布式任务处理系统

dev-master 2018-08-16 03:21 UTC

This package is not auto-updated.

Last update: 2021-09-18 12:57:03 UTC


README

中文介绍

  • 类似gearman的基于swoole的分布式任务处理系统
  • 高性能/动态多工作者进程消费队列,加速后台耗时服务
  • 无需配置类似gearman工作者的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. 架构图

Architecture diagram Process model

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
  • cd 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参数

参数 类型 示例
jobData json {"topic":"MyJob","jobClass":"\Kcloze\Jobs\Jobs\MyJob","jobMethod":"test2","jobParams":["kcloze",1532857253,"oop"],"jobExtras":[],"serializeFunc":"php"}

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

demo

状态

status

钉钉消息

message

8. 变更日志

9. 需注意的事项

  • 如果你嵌入自己的框架,可以参考src/Action代码来继承抽象类Kcloze\Jobs\Action\BaseAction。
  • 不同的框架服务启动略有不同,具体请参考:example/bin项目的代码。

10. 压力测试

  • 瓶颈:redis/rabbitmq队列存储本身和任务执行速度

11. 感谢

12. 联系方式

QQ群:141059677

13. 捐赠

  • 如果这个项目真的帮助了你,请点击右上角进行星标。