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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

127.0.0.1 zxt.php_shmilyzxt/

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

README

A yii2 extension to make simple to use queue.

yii2-queue讓隊列的使用在yii2中變得更輕松,她為各種隊列組件的使用提供了一個標準的接口,您只需要配置好需要使用的隊列組件,就能輕松使用,

同時您在不同隊列組件之間的切換也只需要修改下配置文件,重啟下隊列監聽進程即可,目前支持數據庫隊列,redis隊列,beanstalkd隊列,

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

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:在配置文件中配置好需要使用的隊列,完整的配置代碼如下:

數據庫隊列

'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' //存儲失敗日志的表名

],

],

]

redis隊列

'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'

],

],

]

beanstalkd隊列

'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'

],

],

],

2:在components數組配置項中配置好隊列后,就可以開始使用隊列了,首先是任務入隊列,提供兩個方法:

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

即時任務入隊列:這樣的任務入隊列后,如果隊列監聽在運行,那么任務會立刻進入ready狀態,可以被監聽進程執行。

該方法有3個參數,第一個為任務處理handler,第二個為任務數據,第三個為隊列名稱,默認為 default。

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

延時任務入隊列:這樣的任務入隊列后不會立刻被隊列監聽進程之行,需要等待 $delay秒后任務才就緒。

目前支持的handler有:

1,新建自己的隊列處理handler,繼承、shmilyzxt\queue\base\JobHandler,并實現任務處理方法handle()和失敗處理方法failed()。

2, 一個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:新建自己的隊列處理handler,繼承shmilyzxt\queue\base\JobHandler,并實現任務處理方法handle和失敗處理方法failed,一個發郵件的jobhandler類似:

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次都失敗了,算了");

}

}

4:啟動后臺隊列監聽進程,對任務進行處理,您可以使用yii console app來啟動,你也可以使用更高級的如swoole來高效的運行隊列監聽,

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

啟動隊列監聽進程,其中 $attempt是任務嘗試次數,$memory是允許使用最大內存,$sleep表示每次嘗試從隊列中獲取任務的間隔時間,$delay代表把任務重新加入隊列

時是否延時(0代表不延時),一個標準yii console app 啟動隊列監聽進程代碼如下;

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

當后臺監聽任務啟動起來后,一但有任務加入隊列,隊列就會調用入隊列時設置的handler對隊列任務進行處理了。每次會pop出一個任務進行處理,處理完成后刪除任務,直到隊列為空。

5:關于任務失敗處理:

默認情況下,一個任務在執行時出現異?;蛘咭粋€任務失敗時并不是認為它真正失敗了,此時會檢測它的嘗試次數是否已經超出設置的attempt,如果沒超出會重新入隊列嘗試,如果超出了,

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

的類沒有寫failed()方法),則會嘗試使用擴展自身的失敗日志處理機制(配置項里的failed配置),會嘗試把失敗任務的詳細信息寫入到數據庫表中(目前只支持數據庫方式)。

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

6:任務事件支持:

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。