日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

127.0.0.1 zxt.php_shmilyzxt/

發(fā)布時(shí)間:2024/1/8 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 127.0.0.1 zxt.php_shmilyzxt/ 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

README

A yii2 extension to make simple to use queue.

yii2-queue讓隊(duì)列的使用在yii2中變得更輕松,她為各種隊(duì)列組件的使用提供了一個(gè)標(biāo)準(zhǔn)的接口,您只需要配置好需要使用的隊(duì)列組件,就能輕松使用,

同時(shí)您在不同隊(duì)列組件之間的切換也只需要修改下配置文件,重啟下隊(duì)列監(jiān)聽進(jìn)程即可,目前支持?jǐn)?shù)據(jù)庫隊(duì)列,redis隊(duì)列,beanstalkd隊(duì)列,

其它隊(duì)列中間件支持正在添加中(當(dāng)然,聰明的你也可以自行擴(kuò)展)。

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist shmilyzxt/yii2-queue "dev-master"

or add

"shmilyzxt/yii2-queue": "dev-master"

to the require section of your composer.json file.

Usage

1:在配置文件中配置好需要使用的隊(duì)列,完整的配置代碼如下:

數(shù)據(jù)庫隊(duì)列

'queue' => [

'class' => 'shmilyzxt\queue\queues\DatabaseQueue', //隊(duì)列使用的類

'jobEvent' => [ //隊(duì)列任務(wù)事件配置,目前任務(wù)支持2個(gè)事件

'on beforeExecute' => ['shmilyzxt\queue\base\JobEventHandler','beforeExecute'],

'on beforeDelete' => ['shmilyzxt\queue\base\JobEventHandler','beforeDelete'],

],

'connector' => [//隊(duì)列中間件鏈接器配置(這是因?yàn)槭褂脭?shù)據(jù)庫,所以使用yii\db\Connection作為數(shù)據(jù)庫鏈接實(shí)例)

'class' => 'yii\db\Connection',

'dsn' => 'mysql:host=localhost;dbname=yii2advanced',

'username' => 'root',

'password' => '',

'charset' => 'utf8',

],

'table' => 'jobs', //存儲隊(duì)列數(shù)據(jù)表名

'queue' => 'default', //隊(duì)列的名稱

'expire' => 60, //任務(wù)過期時(shí)間

'maxJob' =>0, //隊(duì)列允許最大任務(wù)數(shù),0為不限制

'failed' => [//任務(wù)失敗日志記錄(目前只支持記錄到數(shù)據(jù)庫)

'logFail' => true, //開啟任務(wù)失敗處理

'provider' => [ //任務(wù)失敗處理類

'class' => 'shmilyzxt\queue\failed\DatabaseFailedProvider',

'db' => [ //數(shù)據(jù)庫鏈接

'class' => 'yii\db\Connection',

'dsn' => 'mysql:host=localhost;dbname=yii2advanced',

'username' => 'root',

'password' => '',

'charset' => 'utf8',

],

'table' => 'failed_jobs' //存儲失敗日志的表名

],

],

]

redis隊(duì)列

'queue' => [

'class' => 'shmilyzxt\queue\queues\RedisQueue',

'jobEvent' => [

'on beforeExecute' => ['shmilyzxt\queue\base\JobEventHandler','beforeExecute'],

'on beforeDelete' => ['shmilyzxt\queue\base\JobEventHandler','beforeDelete'],

],

'connector' => [ //需要安裝 predis\predis 擴(kuò)展來操作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'

],

],

]

beanstalkd隊(duì)列

'queue' => [

'class' => 'shmilyzxt\queue\queues\BeanstalkdQueue',

'jobEvent' => [

'on beforeExecute' => ['shmilyzxt\queue\base\JobEventHandler','beforeExecute'],

'on beforeDelete' => ['shmilyzxt\queue\base\JobEventHandler','beforeDelete'],

],

'connector' => [ //需要安裝 pad\pheanstalk 擴(kuò)展來操作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'

],

],

],

2:在components數(shù)組配置項(xiàng)中配置好隊(duì)列后,就可以開始使用隊(duì)列了,首先是任務(wù)入隊(duì)列,提供兩個(gè)方法:

\Yii::$app->queue->pushOn($hander,$data,$queue='default')

即時(shí)任務(wù)入隊(duì)列:這樣的任務(wù)入隊(duì)列后,如果隊(duì)列監(jiān)聽在運(yùn)行,那么任務(wù)會立刻進(jìn)入ready狀態(tài),可以被監(jiān)聽進(jìn)程執(zhí)行。

該方法有3個(gè)參數(shù),第一個(gè)為任務(wù)處理handler,第二個(gè)為任務(wù)數(shù)據(jù),第三個(gè)為隊(duì)列名稱,默認(rèn)為 default。

\Yii::$app->queue->laterOn($delay,$handler,$data,$queue='default')

延時(shí)任務(wù)入隊(duì)列:這樣的任務(wù)入隊(duì)列后不會立刻被隊(duì)列監(jiān)聽進(jìn)程之行,需要等待 $delay秒后任務(wù)才就緒。

目前支持的handler有:

1,新建自己的隊(duì)列處理handler,繼承、shmilyzxt\queue\base\JobHandler,并實(shí)現(xiàn)任務(wù)處理方法handle()和失敗處理方法failed()。

2, 一個(gè)php閉包,形如 function($job,$data){}

\Yii::$app->queue->pushOn(new SendMial(),['email'=>'49783121@qq.com','title'=>'test','content'=>'email test'],'email');

\Yii::$app->queue->pushOn(function($job,$data){var_dump($data)},['email'=>'49783121@qq.com','title'=>'test','content'=>'email test'],'email');

\Yii::$app->queue->laterOn(120,new SendMial(),['email'=>'49783121@qq.com','title'=>'test','content'=>'email test'],'email');

\Yii::$app->queue->pushOn(120,function($job,$data){var_dump($data)},['email'=>'49783121@qq.com','title'=>'test','content'=>'email test'],'email');

3:新建自己的隊(duì)列處理handler,繼承shmilyzxt\queue\base\JobHandler,并實(shí)現(xiàn)任務(wù)處理方法handle和失敗處理方法failed,一個(gè)發(fā)郵件的jobhandler類似:

class SendMail extends JobHandler

{

public function handle($job,$data)

{

if($job->getAttempts() > 3){

$this->failed($job);

}

$payload = $job->getPayload();

//$payload即任務(wù)的數(shù)據(jù),你拿到任務(wù)數(shù)據(jù)后就可以執(zhí)行發(fā)郵件了

//TODO 發(fā)郵件

}

public function failed($job,$data)

{

die("發(fā)了3次都失敗了,算了");

}

}

4:啟動后臺隊(duì)列監(jiān)聽進(jìn)程,對任務(wù)進(jìn)行處理,您可以使用yii console app來啟動,你也可以使用更高級的如swoole來高效的運(yùn)行隊(duì)列監(jiān)聽,

目前提供了一個(gè)Worker類,在控制臺程序使用Worker::listen(Queue $queue,$queueName='default',$attempt=10,$memory=512,$sleep=3,$delay=0)可以

啟動隊(duì)列監(jiān)聽進(jìn)程,其中 $attempt是任務(wù)嘗試次數(shù),$memory是允許使用最大內(nèi)存,$sleep表示每次嘗試從隊(duì)列中獲取任務(wù)的間隔時(shí)間,$delay代表把任務(wù)重新加入隊(duì)列

時(shí)是否延時(shí)(0代表不延時(shí)),一個(gè)標(biāo)準(zhǔn)yii console app 啟動隊(duì)列監(jiān)聽進(jìn)程代碼如下;

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

當(dāng)后臺監(jiān)聽任務(wù)啟動起來后,一但有任務(wù)加入隊(duì)列,隊(duì)列就會調(diào)用入隊(duì)列時(shí)設(shè)置的handler對隊(duì)列任務(wù)進(jìn)行處理了。每次會pop出一個(gè)任務(wù)進(jìn)行處理,處理完成后刪除任務(wù),直到隊(duì)列為空。

5:關(guān)于任務(wù)失敗處理:

默認(rèn)情況下,一個(gè)任務(wù)在執(zhí)行時(shí)出現(xiàn)異常或者一個(gè)任務(wù)失敗時(shí)并不是認(rèn)為它真正失敗了,此時(shí)會檢測它的嘗試次數(shù)是否已經(jīng)超出設(shè)置的attempt,如果沒超出會重新入隊(duì)列嘗試,如果超出了,

則該任務(wù)才是真正失敗,這是會先調(diào)用任務(wù)處理handler類的failed()方法處理失敗操作,如果沒有failed()方法(比如handler為閉包或者您自定義的繼承自shmilyzxt\queue\base\JobHandler

的類沒有寫failed()方法),則會嘗試使用擴(kuò)展自身的失敗日志處理機(jī)制(配置項(xiàng)里的failed配置),會嘗試把失敗任務(wù)的詳細(xì)信息寫入到數(shù)據(jù)庫表中(目前只支持?jǐn)?shù)據(jù)庫方式)。

建議您采用繼承shmilyzxt\queue\base\JobHandler的方式生成任務(wù)處理handler并寫自己的failed方法處理失敗任務(wù)。

6:任務(wù)事件支持:

目前任務(wù)支持2個(gè)事件(beforeExecute,beforeDelete), beforeExecute是在任務(wù)被pop出來之后,執(zhí)行之前執(zhí)行。beforeDelete是任務(wù)在被刪除之前執(zhí)行

您可以使用這兩個(gè)事件做自定易操作,只需要像上面配置文件里配置 jobEvent那樣綁定事件處理handler即可 1。

總結(jié)

以上是生活随笔為你收集整理的127.0.0.1 zxt.php_shmilyzxt/的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。