zorac / php-resque
Redis后端库,用于创建后台任务并在稍后处理它们。基于Ruby的Resque的PHP端口。
Requires
- php: >=7.2.0
- ext-pcntl: *
- kamisama/monolog-init: >=0.1.1
- monolog/monolog: >=1.2.0
- predis/predis: ^1.1
- psr/log: >=1.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.2
- pheromone/phpcs-security-audit: ^2.0
- phpstan/phpstan: ^0.12
- phpstan/phpstan-deprecation-rules: ^0.12
- phpstan/phpstan-phpunit: ^0.12
- phpstan/phpstan-strict-rules: ^0.12
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: ^3.5
Conflicts
README
Resque是一个基于Redis的后台任务库,用于创建后台任务、将任务放置在多个队列中并在稍后处理它们。
背景
本版本的php-resque是基于php-resque-ex的分支,而php-resque-ex又是基于chrisboulton的原始php-resque的分支。有关更多信息,请参阅原始README。
此分支还切换到Predis作为后端,并更新为使用命名空间代码,以及从最新的php-resque回滚一些其他功能。
注意。保持完全向后兼容(除了Redis中的数据格式外)不是此分支的目标。主要版本升级将包含破坏性更改。可能在次要版本升级中删除对已停止使用的PHP版本的支持。
附加功能
此分支提供了一些附加功能
Predis支持
此端口使用Predis与其后端Redis连接。
强大的日志记录
您可以直接将日志记录到数据库,而不是将STDOUT输出重定向到文件,或者通过套接字将它们发送到其他地方。我们使用Monolog来管理所有日志。请参阅他们的文档以查看所有可用的处理器。
日志条目增加了更多信息,并与一个工作进程、一个队列以及如果有,一个作业ID相关联。
作业创建委托
现代方法
创建一个实现Resque\Job\CreatorInterface
的类,并将其注入到工作进程中,例如。
$worker = new Resque\Worker($queues); $creator = new My\Creator(); $worker->setCreator($creator);
传统方法
如果存在Resque_Job_Creator
类,并且被Resque找到,所有作业的创建都将委托给此类。
将此类注入的最佳方式是将其包含在您的APP_INCLUDE
文件中。
类内容是
class Resque_Job_Creator { /** * Create a new Resque Job. * * @param string $className Your job class name, the second argument when * enqueuing a job. * @param array<mixed> $args The arguments passed to your job. */ public static function createJob($className, $args) { return new $className(); } }
这在您的自动加载器无法加载类时非常有用,例如当类名与其文件名不匹配时。一些框架,如CakePHP,使用PluginName.ClassName
约定进行类名,并且在加载之前需要特殊处理。
失败的作业日志
您可以轻松地从redis数据库中检索失败的作业的日志,它们的键以它们的作业ID命名。每个失败的日志条目将在两周后过期以节省空间。
高级队列过滤
队列名称可以包含通配符字符*
,这将导致工作进程检索所有队列的列表,并以随机顺序处理所有匹配的队列。每个*
可以匹配零个或多个字符;您可以有多个通配符,并且特别地,一个只有*
的队列名称将匹配所有队列。此外,您可以通过在名称前加上!
来排除队列;这些排除模式也可以包含通配符,并且可以出现在队列列表的任何位置。排除只影响通配符模式。
例如,如果队列设置如下
QUEUES="system:high,*:high,*,system:low,!*:low"
则工作进程将按以下顺序处理队列
system:high
- 所有以
:high
结尾的其他队列,以随机顺序。 - 所有不以
:low
结尾的其他队列,以随机顺序。 system:low
增强型优雅关闭
默认的优雅关闭过程(通过向工作进程发送SIGTERM
触发)将在强制使用SIGKILL
杀死子进程之前等待$worker->gracefulDelay
秒(默认为五秒)。这将允许短运行的任务完成,同时仍然允许工作进程以合理的时间退出。
如果您希望工作能够优雅地关闭自己,例如确保即使在任务被提前终止的情况下也能执行日志记录或清理,则可以将$worker->gracefulSignal
设置为要发送的信号而不是SIGKILL
。在额外的延迟$worker->gracefulDelayTwo
秒(默认为两秒)后,将向子进程发送最后的杀死信号,并退出工作进程。
安装
最简单的方法是使用composer,在您的composer.json
中添加以下内容
"require": { "zorac/php-resque": "^2.0" }
警告
php-resque需要pcntl php扩展,在Windows平台不可用。如果在Windows机器上尝试安装此包,Composer安装将失败。如果您仍然想冒险继续安装,请使用带有--ignore-platform-reqs
选项的composer install命令。
用法
日志记录
使用与原始端口相同的方式,并添加额外的ENV
LOGHANDLER
:指定用于日志记录的处理程序(文件、MongoDB、套接字等)。有关所有可用处理程序的信息,请参阅Monolog文档。LOGHANDLER
是处理程序名称,不包含"处理程序"部分。要使用CubeHandler,只需键入"Cube"。LOGHANDLERTARGET
:处理程序用于连接数据库的信息。取决于日志处理程序的类型。如果是RotatingFileHandler,目标将是文件名。如果是CubeHandler,目标将是UDP地址。请参阅每个处理程序以了解其__construct()
方法所需的参数类型。LOGGING
:必须设置此环境变量才能通过Monolog启用日志记录。例如:LOGGING=1
如果这两个环境变量之一缺失,则默认为RotatingFile处理程序。
Redis后端
REDIS_BACKEND
:Redis数据库的主机名或Predis DSNREDIS_DATABASE
:选择另一个Redis数据库(默认为0)REDIS_NAMESPACE
:为键设置不同的命名空间(默认为resque)
要求
- PHP 7.2+
- Redis 2.2+
贡献者
- chrisboulton为原始端口
- wa0x6e为php-resque-ex
- zorac