kwhat / legume

Legume: 多线程作业管理器和守护进程

安装: 5

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 0

开放问题: 1

类型:项目

dev-master 2019-11-25 19:02 UTC

This package is auto-updated.

Last update: 2024-08-26 05:09:18 UTC


README

创建和管理工作池以进行并行处理可能是一项具有挑战性的任务。幸运的是,Legume提供了一种轻量级的php-pthread实现,能够连接到不同的队列。目前仅支持beanstalkd,但未来将添加RabbitMQ支持。Legume作业管理器可以根据队列需求扩展运行工作进程的数量,并且只处理它有处理能力的作业。Legume还支持高并发,开销低。唯一限制因素将是作业本身的负载。

使用方法

此项目有两个使用路径,一个用于运行守护进程,另一个用于创建和排队作业。

守护进程控制

可以通过 ./bin/legumed --help 访问守护进程管理器。

 # bin/legumed -H
   Usage: bin/legumed <command> [options] [operands]

   Options:
     -H, --help
     -P, --pid <arg>
     -v, --verbose <arg>

   Commands:
     start    Start the worker
     stop     Stop the worker

要启动守护进程,只需调用 ./bin/legumed start。如果您想启动后台进程,请添加 -D, --daemon 标志。要停止守护进程,运行 ./bin/legumed stop。如果您没有使用 -D, --daemon 启动守护进程,SIGTERM 或 SIGINT 将终止前台进程。请注意,如果您尝试启动守护进程并收到有关更改池的用户、组或优先级的异常,您需要使用root用户或sudo命令使用权限启动 ./bin/legumed

作业配置

可通过 conf/legumed.conf.php 配置可用作业。此文件包含一个关联数组,将作业名称映射到callable 或实现 JobHandlerInterface 的类名字符串。所有有效类都将注册到池中的所有工作进程中,任何无效类都将被忽略。

创建作业

要创建Legume作业,只需在您的类中实现 Legume\Job\HandlerInterface 并将完整命名空间添加到作业配置文件中。当工作进程获取作业时,将调用 __invoke($jobId, $workload) 方法,并传递当前作业ID和排队作业时使用的负载。不会对负载应用任何处理,如 unserialize()json_decode()

排队作业负载

Legume不提供任何直接的作业排队功能。相反,应使用用于与目标作业队列通信的库。提供给客户端的作业名称必须与使用带有 start 命令和 --jobs 标志的配置的一个或多个Legume实例匹配。

$client = new Pheanstalk("127.0.0.1");

$seconds = rand(15, 60 * 1);

$client->useTube("ExampleJob")
    ->put($seconds, Pheanstalk::DEFAULT_PRIORITY, Pheanstalk::DEFAULT_DELAY, Pheanstalk::DEFAULT_TTR);

附加信息

最新源代码和文档可在: https://github.com/kwhat/legume/