冷锋实验室 / 辛黛瑞拉
由 HTTP 触发的后台任务执行器
Requires
- amphp/http-client: ^4
- amphp/http-server-router: ^1
- amphp/log: ^1
- amphp/process: ^1
- symfony/yaml: ^4
This package is auto-updated.
Last update: 2024-09-24 21:37:35 UTC
README
辛黛瑞拉是一个易于配置的异步后台和计划任务运行守护进程,您可以通过 HTTP 触发它。其目的是支持主应用程序。
特性
- 后台任务:辛黛瑞拉将在后台运行任务,而不需要应用程序阻塞。
- 异步任务:辛黛瑞拉可以同时运行多个任务,以便支持的主应用程序不需要处理这种逻辑。
- 任务调度:任务可以在辛黛瑞拉中调度,并在指定的指定时间后大约 50 毫秒内运行。
- 任务排队:辛黛瑞拉可用于排队后台任务,以便它们在后台一个接一个地运行。
动机
PHP 网络应用程序通常不以居民服务的形式存在。它们的生命周期在满足 HTTP 请求时结束。因此,它们不应该管理长时间运行的后台作业。通常的解决方案是使用 cron 来管理后台作业,然而这限制了作业可以触发的时机,并且意味着作业不能立即运行。
辛黛瑞拉是一个本地服务,用于执行后台作业。您通过 HTTP 信号您想让她运行的任务,然后继续。
辛黛瑞拉留在服务器上,执行长时间运行的后台进程,比如从壁炉里挑豆子,而您的应用程序去参加舞会。
任务
任务是预定义的工作单元,可以通过传递选项进行配置。任务的作业立即执行或延迟,并返回一个承诺来执行作业。
任务附加到辛黛瑞拉的端点(即,对配置端点的 POST/GET 请求将执行特定任务)。配置端点的方法在下面的 配置 部分中介绍。
所有任务都接受基本参数 "id"。这可以设置为任何字符串值,并将其与该任务一起保留,以便您可以在以后识别其结果。
任务类型
从壁炉里挑豆子(pick_lentils)
这是一个演示任务。
它接受参数 lentils
,并返回一个承诺,表示此后台任务将花费 lentils
秒来完成。
在 lentils
秒后,任务解决。
** 参数: **
id
:用于识别此任务的字符串。lentils
:运行时间(秒)。
试穿拖鞋(try_on_slipper)
这是一个演示任务。
它立即运行并返回一个字符串。
** 参数: **
id
:用于识别此任务的字符串。
HTTP 请求(http_request)
此任务返回一个承诺,以运行在选项中定义的 HTTP 请求。
** 参数: **
id
:用于识别此任务的字符串。method
:'GET' 或 'POST' 之一,控制 HTTP 请求方法。body
:包含在 HTTP 请求中的 HTTP 主体headers
:键 => 值的数组/对象,形成 HTTP 头部timeout
:HTTP 请求超时时间(秒)(默认为15
)url
:要发出 HTTP 请求的 URL。
状态(status)
此任务立即返回辛黛瑞拉中正在运行或挂起的任务的当前状态。
** 参数: **
id
:用于识别此任务的字符串。
计划刷新(schedule_refresh)
此任务返回一个承诺以刷新所有任务计划。
** 参数: **
id
:用于识别此任务的字符串。
任务运行器(task_runner)
任务运行器任务可以同时运行多个任务。此任务允许您在单个请求中同时运行其他任务。
它还有一个可选的选项 resolve
,它可以保留一个在所有任务完成后运行的附加任务。
** 参数: **
id
:用于识别此任务的字符串。tasks
:要异步运行的任务的数组。resolve
:在所有任务完成后运行的附加任务。
队列任务(queued_task)
此任务作为一个名为 task
的选项,并将其添加到 queue
中的命名队列中。每个队列每次只运行一个任务。一旦指定的任务完成,将会运行 resolve
选项中的可选任务。如果队列中还有其他任务,则 resolve
任务将与下一个任务同时运行。
** 参数: **
id
:用于识别此任务的字符串。queue
:此任务应添加到的队列名称。task
:应运行的任务。resolve
:在任务完成后运行的任务。
配置
默认配置
设置配置
入门指南
先决条件
- PHP 7.0 或更高版本
- Composer
安装步骤
- 克隆主分支
- 运行
$ composer install
运行
简单地运行 $ ./bin/cinderella
以默认配置启动 Cinderella。
或者如果您已经定义了配置
- 在 yaml 文件中定义您的任务,例如 'config.yaml'
- 运行 cinderella
$ ./bin/cinderella config.yaml
配置
Cinderella 接受并需要恰好一个参数,即包含其 YAML 配置的文件名。
配置文件定义了 Cinderella 的所有运行时配置。
部署
容器
运行
podman run --rm -d coldfrontlabs/cinderella:latest
带有任务调度
podman run --rm -d -e CINDERELLA_SCHEDULE_URL=http://url.to/my/schedule coldfrontlabs/cinderella:latest
注意事项
Cinderella 仍在开发中,并且配置验证尚不完整。
构建使用
编码标准
PSR2