Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hectorqin/php-resque
php-resque for ThinkPHP5/6, ThinkPHP3.2
https://github.com/hectorqin/php-resque
php-resque thinkphp5 thinkphp6 tp3 worker
Last synced: 2 months ago
JSON representation
php-resque for ThinkPHP5/6, ThinkPHP3.2
- Host: GitHub
- URL: https://github.com/hectorqin/php-resque
- Owner: hectorqin
- License: mit
- Created: 2020-09-09T09:45:39.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-07-02T08:08:24.000Z (over 3 years ago)
- Last Synced: 2024-08-07T05:50:56.410Z (5 months ago)
- Topics: php-resque, thinkphp5, thinkphp6, tp3, worker
- Language: PHP
- Homepage:
- Size: 146 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PHP-Resque
- [PHP-Resque](#php-resque)
- [安装](#安装)
- [配置](#配置)
- [使用](#使用)
- [启动worker](#启动worker)
- [投递任务](#投递任务)
- [简单任务](#简单任务)
- [自定义任务](#自定义任务)
- [监听事件](#监听事件)
- [快捷投递任务](#快捷投递任务)在 [chrisboulton/php-resque](https://github.com/chrisboulton/php-resque) 的基础上进行了如下改造:
- 采用psr-4自动加载规范
- 合并 php-resque-scheduler
- 新增自定义处理方法worker
- 支持自定义worker
- 支持redis扩展及Predis扩展
- 支持Timer定时器功能
- 支持Crontab定时任务功能
- 支持ThinkPHP5/6命令行使用
- 支持THinkPHP3.2控制器CLI模式使用
- 提供Controller trait便于其它框架启动worker
- 提供MagicCall trait便于提交队列任务## 安装
```bash
composer require hectorqin/php-resque
```## 配置
TP5/6 默认获取 resque 配置文件, TP3.2 默认获取 RESQUE_CONFIG 配置
```php
false,
// redis 数据库信息
'redis_backend' => '',
// redis 数据库编号
'redis_database' => '',
// worker消费间隔
'interval' => 5,
// worker组
'worker_group' => [
[
"type" => "Worker",
"queue" => "deault",
"nums" => 1,
],
[
"type" => "SchedulerWorker",
"queue" => "default",
"nums" => 1,
],
[
"type" => "CustomWorker",
"queue" => "dump_date",
'interval' => 5,
"nums" => 2,
// 可使用闭包
"handler" => function () {
WorkerManager::log("current datetime" . date("Y-m-d H:i:s"));
},
],
[
"type" => "CrontabWorker",
"queue" => "crontab",
"nums" => 2,
"workerQueue" => "default",
],
],// 动态加载文件,使用 glob 函数
'app_include' => '',// redis存储前缀,默认为 resque
'prefix' => '',// manager pid文件
'pidfile' => './resque.pid',// 日志文件
'log_file' => './resque.log',// status临时文件
'statistics_file' => './resque.status',// 是否不调用pcntl_fork,不调用时只支持一个workerGroup,且只有一个进程
'no_fork' => false,// 是否记录info日志
'verbose' => false,
// 是否记录debug日志
'vverbose' => false,
// 日志记录级别
'log_level' => [
LogLevel::EMERGENCY,
LogLevel::ALERT,
LogLevel::CRITICAL,
LogLevel::ERROR,
LogLevel::WARNING,
LogLevel::NOTICE,
// LogLevel::INFO,
],// worker事件监听器
'listener' => [
StatsListener::class,
],// manager进程定时器 ["interval"=>1, "handler"=>callable, "params"=>[], "persistent"=>true]
// interval 时间间隔,handler 回调函数(可使用闭包),params 回调参数,persistent 是否周期性任务
'manager_timer' => [],
// worker 上的 秒级 crontab ["name"=>'mycrontab',"rule"=>"0 * * * * *","handler"=>callable,"params"=>[]]
// name 名称,rule 定时规则,handler 回调函数(不能使用闭包,闭包可以用opis/closure包装一下),params 回调参数
// 必须启动 CrontabWorker 和 SchedulerWorker
'worker_crontab' => [],
];
```## 使用
### 启动worker
```bash
# 测试
./vendor/bin/resque# ThinkPHP使用
php think resque start
# 守护进程
php think resque start -d
```### 投递任务
投递任务之前需要设置 ResqueRedis 的配置, `Resque::setBackend($redis_backend);`,TP5 / TP6 默认自动使用resque配置文件。TP3.2需要手动配置 `Resque::setBackend(C('RESQUE_CONFIG.redis_backend'));`。
#### 简单任务
handler为任务执行函数
```php
use Resque\Job\SimpleJob;// 投递到 default 队列
SimpleJob::default([
'handler' => ['\\app\\index\\controller\\Index', 'job'],
'params' => [
'hello' => 0
], // ThinkPHP 支持参数绑定,其他框架请按照参数顺序传值
], true);// 投递到 task 队列,延迟10秒执行
SimpleJob::task([
'handler' => ['\\app\\index\\controller\\Index', 'job'],
'params' => [
'hello' => 0
], // ThinkPHP 支持参数绑定,其他框架请按照参数顺序传值
], true, 10);// 投递到 task 队列,定时执行
SimpleJob::task([
'handler' => ['\\app\\index\\controller\\Index', 'job'],
'params' => [
'hello' => 0
], // ThinkPHP 支持参数绑定,其他框架请按照参数顺序传值
], true, strtotime("2020-12-01"));
``````php
1
]);// 延迟3秒执行任务
MyJob::enqueueAt([
'hello' => 1
], 3);// 一个小时后执行任务
MyJob::enqueueAt([
'hello' => 1
], time() + 3600);(new MyJob())->delay(5)->executeAsync($param1, $param2);
```### 监听事件
```php
// Worker、SchedulerWorker、CustomWorker、CrontabWorker 启动事件
Event::listen('onWorkerStart', [$this, 'onWorkerStart']);
// Worker 创建job进程前事件
Event::listen('beforeForkExecutor', [$this, 'beforeForkExecutor']);
// Worker 创建job进程后事件
Event::listen('afterForkExecutor', [$this, 'afterForkExecutor']);
// 任务执行前事件
Event::listen('beforePerformJob', [$this, 'beforePerformJob']);
// 任务执行后事件
Event::listen('afterPerformJob', [$this, 'afterPerformJob']);
// 任务执行失败事件
Event::listen('onJobFailed', [$this, 'onJobFailed']);
// Worker、SchedulerWorker、CustomWorker、CrontabWorker 关闭事件
Event::listen('onWorkerStop', [$this, 'onWorkerStop']);
// 任务入队前事件
Event::listen('beforeEnqueue', [$this, 'beforeEnqueue']);
// 任务入队后事件
Event::listen('afterEnqueue', [$this, 'afterEnqueue']);
// 延迟/定时任务进入定时队列后事件
Event::listen('afterSchedule', [$this, 'afterSchedule']);
// 延迟/定时任务进入执行队列前事件
Event::listen('beforeDelayedEnqueue', [$this, 'beforeDelayedEnqueue']);
```### 快捷投递任务
```php
Class Test
{
use \Resque\Concern\MagicCall;/**
* 任务执行 handler
*/
function testResque($name)
{
trace('Hello ' . $name);
}function test()
{
// 设置默认同步执行,不使用队列,可用于调试
// $this->setSync(true);
$this->setDefaultQueue('default');
// 任务 handler方法名 + Async 即可投递任务,参数顺序保持一致,方便调试
$this->testResqueAsync('hector');
$this->delay(5)->testResqueAsync('hector');
$this->at(time() + 10)->testResqueAsync('hector');
$this->at(time() + 15)->handler([\get_class(), 'testResque'], [
'hector'
])->send();// 同步执行,不使用队列,调试用
$this->sync(true)->testResqueAsync('hector');
}
}$test = new Test();
$test->test();```