文档章节

Yii2 使用 Beanstalk 队列

 小田天
发布于 2016/11/18 15:30
字数 408
阅读 50
收藏 0

安装

安装服务端

根据官方的教程安装,一条命令搞定。

安装 Yii2 客户端扩展

在你 Yii2 项目中执行

 
  1. $ composer require udokmeci/yii2-beanstalk "dev-master"

安装管理 Beanstalk 队列的 Web 系统

 

此项目是一个单独的系统,可以查看和管理队列任务

 

 
  1. $ composer create-project ptrofimov/beanstalk_console -s dev path/to/install

使用

开启服务端

 
  1. $ beanstalkd -l 127.0.0.1 -p 11300

Yii2 端使用

添加配置文件:

 
  1. 'components' => [
  2. // ...
  3. 'beanstalk' => [
  4. 'class' => 'udokmeci\yii2beanstalk\Beanstalk',
  5. 'host' => 127.0.0.1, // default host
  6. 'port' => 11300,
  7. 'connectTimeout' => 1,
  8. 'sleep' => false, // or int for usleep after every job
  9. ],
  10. // ...
  11. ],

执行队列在 console\controllers\WorkerController 里面:

 
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: yidashi
  5. * Date: 16/8/16
  6. * Time: 下午9:09
  7. */
  8.  
  9. namespace console\controllers;
  10.  
  11. use udokmeci\yii2beanstalk\BeanstalkController;
  12. use yii\helpers\Console;
  13. use Yii;
  14.  
  15. class WorkerController extends BeanstalkController
  16. {
  17. // Those are the default values you can override
  18.  
  19. const DELAY_PRIORITY = "1000"; //Default priority
  20. const DELAY_TIME = 5; //Default delay time
  21.  
  22. // Used for Decaying. When DELAY_MAX reached job is deleted or delayed with
  23. const DELAY_MAX = 3;
  24.  
  25. public function listenTubes(){
  26. return ["tube"];
  27. }
  28.  
  29. /**
  30. *
  31. * @param Pheanstalk\Job $job
  32. * @return string self::BURY
  33. * self::RELEASE
  34. * self::DELAY
  35. * self::DELETE
  36. * self::NO_ACTION
  37. * self::DECAY
  38. *
  39. */
  40. public function actionTube($job){
  41. $sentData = $job->getData();
  42. try {
  43. // something useful here
  44.  
  45. /*if($everthingIsAllRight == true){
  46. fwrite(STDOUT, Console::ansiFormat("- Everything is allright"."\n", [Console::FG_GREEN]));
  47. //Delete the job from beanstalkd
  48. return self::DELETE;
  49. }
  50.  
  51. if($everthingWillBeAllRight == true){
  52. fwrite(STDOUT, Console::ansiFormat("- Everything will be allright"."\n", [Console::FG_GREEN]));
  53. //Delay the for later try
  54. //You may prefer decay to avoid endless loop
  55. return self::DELAY;
  56. }
  57.  
  58. if($IWantSomethingCustom==true){
  59. Yii::$app->beanstalk->release($job);
  60. return self::NO_ACTION;
  61. }
  62.  
  63. fwrite(STDOUT, Console::ansiFormat("- Not everything is allright!!!"."\n", [Console::FG_GREEN]));
  64. //Decay the job to try DELAY_MAX times.
  65. return self::DECAY;*/
  66.  
  67. // if you return anything else job is burried.
  68. } catch (\Exception $e) {
  69. //If there is anything to do.
  70. fwrite(STDERR, Console::ansiFormat($e."\n", [Console::FG_RED]));
  71. // you can also bury jobs to examine later
  72. return self::BURY;
  73. }
  74. }
  75. }

最后记得要执行你写的 Worker:

$ php yii worker

参考文献

原文链接: http://www.getyii.com/topic/531

本文转载自:http://www.51siyuan.cn/91.html

共有 人打赏支持
粉丝 0
博文 79
码字总数 49841
作品 0
怀化
yii2 - Event 实例及源码分析

yii2 可以方便的使用 Event 组件基类 来实现 注册事件和监听触发 机制,每个事件都有自身的事件队列 首先要知道,yii2的事件一共有三类:对象级,类级,全局 Yii::$app 级 对象和 全局是通过...

big_cat
2016/05/27
188
0
yii2 - Behavior 实例及源码分析

Behavior 的简述 行为简单来说是组件的扩展,可以对组件的属性,方法,事件 (yii2组件的三大要点)进行扩展而无需改动组件现有的代码逻辑。即此行为所拥有的属性,方法,事件,都会被绑定它...

big_cat
2016/06/01
811
0
安装指南: 带有 RBAC 的 Yii2 高级模板

在这里我介绍一种快速简单的方法来在 Yii2 高级模版中安装 RBAC(Role Based Access Control) 系统 安装: Yii2 高级模板 在这里使用 安装 yii2 高级模板。假如你的机器中没有 请下载 它的最新...

首席烤地瓜
2016/11/10
17
0
Yii2中关于组件的注册以及创建的方法详解

了解yii组件注册与创建的过程,并发现原来yii组件注册之后并不是马上就去创建的,而是待到实际需要使用某个组件的时候再去创建对应的组件实例的。本文大概记录一下这个探索的过程。   要了...

botkenni
06/08
0
0
在 Swoole 上运行 yii2 - yii2-swoole

yii2 swoole:让yii2运行在swoole上 性能 运行在swoole上的yii2是运行在php-fpm上yii2的5倍以上,而且一句代码也不用修改。 在线demo性能体验 各个演示站点后台 用户名:feehicms 密码123456 ...

liufee
2017/12/24
139
1

没有更多内容

加载失败,请刷新页面

加载更多

负载均衡的解决方案有哪些

负载均衡器服务可满足大型组织的需求,支持所有数据中心和跨数据中心高可靠性场景。 本地负载均衡,通过附带或者未附带持久性覆盖选项,Incapsula支持各种负载均衡算法,以优化服务器之间的流...

上树的熊
10分钟前
0
0
Java实现在线打开word文档加盖印章/盖章/签名功能

前言: 我们知道,大型一点的OA办公系统都会有很多在线处理office办公文档的需求。其中有一点也基本绕不开,那就是为文档盖章或添加手写签名来保护文档,让被盖章的文档不再被编辑。 在Java中...

山里的红杏
17分钟前
3
0
js控制输入正负数,小数点后保留两位

//限制数字function clearNoNum(obj){ //修复第一个字符是小数点 的情况. if(obj.value !=''&& obj.value.substr(0,1) == '.'){ obj.value=""; } obj.value ...

一直在成长的程序猿
20分钟前
1
0
动态代理

具体场景 为了使代理类与被代理类对第三方有相同的函数,代理类与被代理类一般实现一个公共的interface,定义如下 public interface Subject { void rent(); void hello(String s)...

wuyiyi
23分钟前
0
0
时间字段

我们看看这几个数据库中(mysql、oracle和sqlserver)如何表示时间 mysql数据库:它们分别是 date、datetime、time、timestamp和year。date :“yyyy-mm-dd”格式表示的日期值 time :“hh:...

DemonsI
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部