PHP code example of hectorqin / php-resque
1. Go to this page and download the library: Download hectorqin/php-resque library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
hectorqin / php-resque example snippets
use Psr\Log\LogLevel;
use Resque\Listener\StatsListener;
use Resque\WorkerManager;
return [
// 是否守护进程
'daemonize' => 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_>'mycrontab',"rule"=>"0 * * * * *","handler"=>callable,"params"=>[]]
// name 名称,rule 定时规则,handler 回调函数(不能使用闭包,闭包可以用opis/closure包装一下),params 回调参数
// 必须启动 CrontabWorker 和 SchedulerWorker
'worker_crontab' => [
],
];
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"));
namespace app\index\controller;
class Index
{
function job($hello) {
echo $hello;
}
}
use Resque\Job\SimpleJob;
use Resque\Job;
/**
* 自定义任务
* @property array $args 任务参数
* @property Job $job 任务对象
* @property string $queue 队列名称
*/
class MyJob extends SimpleJob
{
/**
* 任务执行逻辑
*
* TP支持参数绑定,其余框架仅支持数组参数
*
* @return mixed
* @throws ThinkException
* @throws InvalidArgumentException
* @throws ClassNotFoundException
*/
public function execute($hello)
{
// 自定义任务逻辑
}
/**
* 成功回调
*
* @return void
*/
public function onSuccess()
{
}
/**
* 失败回调
* @return void
*/
public function onError()
{
}
}
// 投递任务
MyJob::enqueue([
'hello' => 1
]);
// 延迟3秒执行任务
MyJob::enqueueAt([
'hello' => 1
], 3);
// 一个小时后执行任务
MyJob::enqueueAt([
'hello' => 1
], time() + 3600);
(new MyJob())->delay(5)->executeAsync($param1, $param2);
// 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']);
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();
bash
composer
bash
# 测试
./vendor/bin/resque
# ThinkPHP使用
php think resque start
# 守护进程
php think resque start -d