PHP code example of sjfxy / queue
1. Go to this page and download the library: Download sjfxy/queue 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/ */
sjfxy / queue example snippets
'queue' => [
'class' => 'shmilyzxt\queue\queues\DatabaseQueue', //队列使用的类
'jobEvent' => [ //队列任务事件配置,目前任务支持2个事件
'on beforeExecute' => ['shmilyzxt\queue\base\JobEventHandler','beforeExecute'],
'on beforeDelete' => ['shmilyzxt\queue\base\JobEventHandler','beforeDelete'],
],
'connector' => [//队列中间件链接器配置(这是因为使用数据库,所以使用yii\db\Connection作为数据库链接实例)
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'table' => 'jobs', //存储队列数据表名
'queue' => 'default', //队列的名称
'expire' => 60, //任务过期时间
'maxJob' =>0, //队列允许最大任务数,0为不限制
'failed' => [//任务失败日志记录(目前只支持记录到数据库)
'logFail' => true, //开启任务失败处理
'provider' => [ //任务失败处理类
'class' => 'shmilyzxt\queue\failed\DatabaseFailedProvider',
'db' => [ //数据库链接
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'table' => 'failed_jobs' //存储失败日志的表名
],
],
]
'queue' => [
'class' => 'shmilyzxt\queue\queues\RedisQueue',
'jobEvent' => [
'on beforeExecute' => ['shmilyzxt\queue\base\JobEventHandler','beforeExecute'],
'on beforeDelete' => ['shmilyzxt\queue\base\JobEventHandler','beforeDelete'],
],
'connector' => [ //需要安装 predis\predis 扩展来操作redis
'class' => 'shmilyzxt\queue\connectors\PredisConnector',
'parameters' => [
'scheme' => 'tcp',
'host' => '127.0.0.1',
'port' => 6379,
//'password' => '1984111a',
'db' => 0
],
'options'=> [],
],
'queue' => 'default',
'expire' => 60,
'maxJob' => 0,
'failed' => [
'logFail' => true,
'provider' => [
'class' => 'shmilyzxt\queue\failed\DatabaseFailedProvider',
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'table' => 'failed_jobs'
],
],
]
'queue' => [
'class' => 'shmilyzxt\queue\queues\BeanstalkdQueue',
'jobEvent' => [
'on beforeExecute' => ['shmilyzxt\queue\base\JobEventHandler','beforeExecute'],
'on beforeDelete' => ['shmilyzxt\queue\base\JobEventHandler','beforeDelete'],
],
'connector' => [ //需要安装 pad\pheanstalk 扩展来操作beastalkd
'class' => 'shmilyzxt\queue\connectors\PheanstalkConnector',
'host' => '114.55.142.6',
'port' => 11300
],
'queue' => 'default',
'expire' => 60,
'maxJob' => 0,
'failed' => [
'logFail' => true,
'provider' => [
'class' => 'shmilyzxt\queue\failed\DatabaseFailedProvider',
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'table' => 'failed_jobs'
],
],
],
\Yii::$app->queue->pushOn(new SendMial(),['email'=>'[email protected] ','title'=>'test','content'=>'email test'],'email');
\Yii::$app->queue->pushOn(function($job,$data){var_dump($data)},['email'=>'[email protected] ','title'=>'test','content'=>'email test'],'email');
\Yii::$app->queue->laterOn(120,new SendMial(),['email'=>'[email protected] ','title'=>'test','content'=>'email test'],'email');
\Yii::$app->queue->pushOn(120,function($job,$data){var_dump($data)},['email'=>'[email protected] ','title'=>'test','content'=>'email test'],'email');
class SendMail extends JobHandler
{
public function handle($job,$data)
{
if($job->getAttempts() > 3){
$this->failed($job);
}
$payload = $job->getPayload();
//$payload即任务的数据,你拿到任务数据后就可以执行发邮件了
//TODO 发邮件
}
public function failed($job,$data)
{
die("发了3次都失败了,算了");
}
}
class WorkerController extends \yii\console\Controller
{
public function actionListen($queueName='default',$attempt=10,$memeory=128,$sleep=3 ,$delay=0){
Worker::listen(\Yii::$app->queue,$queueName,$attempt,$memeory,$sleep,$delay);
}
}
yii worker/listen default 10 128 3 0