serendipity-swow / serendipity-job
dev-main
2022-06-15 16:16 UTC
Requires
- php: >=8.0
- ext-bcmath: *
- ext-iconv: *
- ext-pdo: *
- ext-redis: >=5.3
- ext-simdjson: *
- ext-sockets: *
- ext-swow: 8
- ajthinking/archetype: ^1.0
- chevere/xr: ^0.2.0
- guzzlehttp/guzzle: ^7.3
- hyperf/contract: 3.0.*
- hyperf/di: 3.0.*
- hyperf/engine-swow: dev-dev
- hyperf/pool: 3.0.*
- hyperf/utils: 3.0.*
- itbdw/ip-database: 3.x-dev
- league/climate: ^3.8
- marwanalsoltany/blend: ^1.0
- matomo/device-detector: ^4.3
- monolog/monolog: ^2.2
- multiplex/multiplex: 1.0.x-dev
- nesbot/carbon: ^2.49
- nette/utils: ^3.2
- nikic/fast-route: ^1.3
- robinvdvleuten/ulid: ^5.0
- spatie/emoji: 3.0
- swow-cloud/archer: ^0.4.0
- swow-cloud/consul: dev-master
- swow-cloud/contract: 3.0.x-dev
- swow-cloud/nsq: ^1.0
- swow-cloud/redis: 3.0.x-dev
- swow-cloud/redis-lock: 3.0.x-dev
- swow-cloud/sockets: ^1.1
- swow/swow: dev-develop
- symfony/config: ^5.3
- symfony/console: ^5.2
- symfony/event-dispatcher: ^6.0
- symfony/serializer: ^5.2
- symfony/serializer-pack: ^1.0
- symfony/workflow: ^5.3
- symfony/yaml: ^5.2
- vlucas/phpdotenv: ^5.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.2
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
- symfony/var-dumper: ^5.2
This package is auto-updated.
Last update: 2024-12-15 22:12:34 UTC
README
🚀 🏆 Task Platform Developed Based On Swow and Php8
🚀Serendipity-Job For 🏆Swow 分布式任务平台
🚀 🏆 Task Platform Developed Based On Swow and Php8
介绍
如今通过PHP开发的任务平台还是停留在原来地同步阻塞模式,通过结合swow开启PHP高性能时代,正式拥抱协程。消息队列选择Nsq利用其易部署,高性能,支持分布式特性。通过Redis分布式锁防止任务并行,实现watchdog防止任务还在执行,而redis锁被释放。给锁续期。该任务平台支持API投递,可以限制其执行时间,支持任务编排,用户可以实时查看任务详情和取消任务,后台支持丰富的图表包括任务统计(成功,失败...)
👇 Features👇
1.支持Api投递任务.推送Nsq进行消费.(完成)
2.支持任务单个运行,并限制在时间内.超出限制时间抛异常(完成)
3.支持任务编排,单个任务限制时间.(完成)
4.支持任务编排支持事务.(暂不考虑)
5.支持重试机制,中间件(完成)
6.支持API查看任务消息
7.支持后台配置任务.
8.支持定时任务Crontab.(完成,考虑是否取消定时任务)
9.支持任务图表(成功,失败,重试,超时,终止.)(开发中)
10.支持任务取消(完成)
11.签名验证(完成)
12.支持刷新应用签名(完成)
13.支持系统监控基于xhprof(不支持sql)不建议开启
14.workflow->https://github.com/uuf6429/state-engine-php
15.支持分布式(Task可以支持分布式)(完成)
16.支持分布式锁(watchdog实现给锁续期)
17.任务执行超时时kill掉,资源回收(完成)
18.支持debug和trace查看(https://github.com/chevere/xr)
19.watchdog限制其最大执行时间 默认60s
20.美化了Swow提供的Debugger组件。
21.新增Debugger:m->获取当前使用内存,server->获取当前服务server信息包括Host,Port,连接数
基于Vue、Vditor,所构建的在线 Markdown 编辑器,支持流程图、甘特图、时序图、任务列表、HTML 自动转换为 Markdown 等功能;🎉新增「所见即所得」编辑模式。
👇 Please note👇
1.传递的任务Task必须实现JobInterface
2.不能包含资源对象.
3.Swow/channel push 和pop 都是毫秒.任务都可以支持毫秒.以后必须要注意.
4.Di主要使用Hyperf/Di
5.取消任务使用kill
6.crontab随消费进程一起启动
7.限制任务执行时间通过channel 限制pop时间如果pop超时直接对执行任务的协程抛出异常.$coroutine->throw($exception);
[ERROR] Consumer failed to consume Consumer,reason: Channel wait producer failed, reason: Timed out for 5000 ms,file: /Users/heping/Serendipity-Job/src/Util/Waiter.php,line: 53
8.不建议同时启动dag和task两个消费。最好单独部署两个项目,server需要连接对应消费端启动的server查看任务详情或者取消任务.而且定时任务没有做集群处理。多台机器只能执行一个任务.
9.请尽量使用框架自带协程的创建方法,主要用日志上下文管理
Hyperf\Utils\Coroutine::create()
10.任务执行时间尽量调大一点
11.dag(任务编排)的执行时间必须要小于nsq的max_msg_timeout的时间,因为超过了nsq会重新入队列
👇 接口文档👇
见API.md
正在进行中的功能
- 环境
- 通过获取服务节点操作任务(分布式),在计划中
- 考虑优化项目结构
- 支持任务图表
- 后台
TODO V3
- 适配其他框架(需要优化项目架构后)
- codecov代码覆盖率
- 静下来想想思考项目的规划,架构
- 考虑使用swow-cloud/redis-subscriber订阅消息
- 支持后台创建任务
- 支持ORM
- FORM
Come on!
Thanks Hyperf.Swow!
Required
1.PHP8
2.Nsq
3.redis
4.mysql
5.ext-swow
6.consul
7.ext-simdjson(https://github.com/crazyxman/simdjson_php)
👇 Usage👇
👇 任务编排👇
安装
composer require swow-cloud/job -vvv
配置文件
需要把config.php
container.php
providers.yaml
和autoload
目录下的文件复制到项目config
目录中
使用blend快速启动server
- 启动server
vendor/bin/blend server:start
- 停止server
vendor/bin/blend server:stop
- 重新启动
vendor/bin/blend server:restart
环境启动
1.启动Serendipity-Job Server.
vendor/bin/job swow-cloud-job:start
2.启动Job 进行任务消费
vendor/bin/job job:start --host=127.0.0.1 --port=9764
参数详解
1.host server host监听地址,用于取消任务或者查看任务详情
2.port server port监听端口号
3.配置Crontab
(new SwowCloud\Job\Crontab\Crontab())->setName('Foo')->setRule('*/5 * * * *')->setCallback([EchoCrontab::class, 'execute'])->setMemo('这是一个示例的定时任务'),