udokmeci / yii2-beanstalk
位于Paul Annesley的pheanstalk之上的Yii2 Beanstalk客户端
1.0.4
2020-11-12 08:41 UTC
Requires
- php: >=5.5
- pda/pheanstalk: 3.*@dev
- yiisoft/yii2: >=2.0.38
Requires (Dev)
- phpunit/phpunit: ~4.0
README
Yii2 beanstalkd 网页和控制台组件,它是基于 pda/pheanstalk 的接口。感谢 Paul Annesley 完成如此出色的作品。
如何使用?
使用Composer安装
只需将以下行添加到您的 composer.json
文件中的 require
对象下。
{ "require": { ... "udokmeci/yii2-beanstalk" : "^1.0.0" } }
然后运行
$> composer update
配置
现在在 components
下,将以下行添加到您的 main
和 console
配置文件中。
'beanstalk'=>[ 'class' => 'udokmeci\yii2beanstalk\Beanstalk', 'host' => '127.0.0.1', // default host 'port' => 11300, //default port 'connectTimeout' => 1, 'sleep' => false, // or int for usleep after every job ],
现在将以下行添加到您的 console
配置中。
... 'params' => $params, // add you controller with name and class name next to params. 'controllerMap' => [ 'worker' => [ 'class' => 'app\commands\WorkerController', ] ],
生产
现在如果一切正常,您可以使用 beandstalkd
并像这样访问控制器:
\Yii::$app->beanstalk ->putInTube('tube', $mixedData, $priority, $delay);
$mixedData
是从 v1.0 开始添加的,用于复杂使用。除了 string
以外,任何其他类型的都会以 json
格式发送。因此,您可以在其中发送任何由 json
支持的内容。
工作进程
对于工作进程,它也有一个内置的控制器,该控制器运行无限循环并等待新的工作。大部分工作都在 BeanstalkController
中完成。您需要做的只是创建一个像下面这样的控制器和动作。
控制器
在您的 commands
文件夹下创建一个控制器。给它起任何名字,并从 udokmeci\yii2beanstalk\BeanstalkController
扩展您的控制器
示例控制器
<?php namespace app\commands; use udokmeci\yii2beanstalk\BeanstalkController; use yii\helpers\Console; use Yii; class WorkerController extends BeanstalkController { // Those are the default values you can override const DELAY_PRIORITY = "1000"; //Default priority const DELAY_TIME = 5; //Default delay time // Used for Decaying. When DELAY_MAX reached job is deleted or delayed with const DELAY_MAX = 3; public function listenTubes(){ return ["tube"]; } /** * * @param Pheanstalk\Job $job * @return string self::BURY * self::RELEASE * self::DELAY * self::DELETE * self::NO_ACTION * self::DECAY * */ public function actionTube($job){ $sentData = $job->getData(); try { // something useful here if($everythingIsAllRight == true){ fwrite(STDOUT, Console::ansiFormat("- Everything is allright"."\n", [Console::FG_GREEN])); //Delete the job from beanstalkd return self::DELETE; } if($everythingWillBeAllRight == true){ fwrite(STDOUT, Console::ansiFormat("- Everything will be allright"."\n", [Console::FG_GREEN])); //Delay the for later try //You may prefer decay to avoid endless loop return self::DELAY; } if($IWantSomethingCustom==true){ Yii::$app->beanstalk->release($job); return self::NO_ACTION; } fwrite(STDOUT, Console::ansiFormat("- Not everything is allright!!!"."\n", [Console::FG_GREEN])); //Decay the job to try DELAY_MAX times. return self::DECAY; // if you return anything else job is burried. } catch (\Exception $e) { //If there is anything to do. fwrite(STDERR, Console::ansiFormat($e."\n", [Console::FG_RED])); // you can also bury jobs to examine later return self::BURY; } } }
运行工作进程
运行控制台是最简单的部分。运行 ./yii Your controller
$> php ./yii worker
控制器将告诉您,是否存在对应管道或beanstalk服务器是否可访问,以及当前正在监听哪些管道。控制器可以处理信号。因此,您可以在任何时候退出,预留的工作不会挂起。
欢迎任何分支。