文档章节

Yii2 使用 Beanstalk 队列

 小田天
发布于 2016/11/18 15:30
字数 408
阅读 122
收藏 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

粉丝 1
博文 84
码字总数 49841
作品 0
怀化
私信 提问
使用yii2-queue结合redis来实现队列功能

使用yii2-queue结合redis来实现队列功能 为什么用它? 其实之前用过activemq,但是这个东西基于Java的,得装一堆东西,还得配置,而且我只是比较简单的功能,所以就没打算上这个,不过后面了解...

栋栋也疯狂
04/02
170
0
redis的简单使用 异步发送邮件

你是否也困在redis,知其然不知其所以然~~ 项目中,到底怎么用?? 一个简单的实例,使用消息队列实现下yii异步发送邮件 redis~~准备工作: 首先得配置redis服务,之前写过相关的文章,可以参考...

萧逸
09/29
0
0
yii2 - Event 实例及源码分析

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

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

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

big_cat
2016/06/01
1K
0
swoole-jobs 4.0 发布,兼容 swoole 4

1.swoole-jobs简介 基于swoole类似gearman的分布式任务处理系统 高性能/动态多woker进程消费队列,加速后端耗时服 无需像gearman一个worker配置一条crontab,swoole-jobs负责管理所有worker状...

peigreet
08/11
2.1K
6

没有更多内容

加载失败,请刷新页面

加载更多

学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
25分钟前
3
0
支撑微博亿级社交平台,小白也能玩转Redis集群(实战篇)

上篇文章《支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)》介绍了Redis集群相关原理,这篇文章将介绍Redis Cluster集群的搭建、配置,运维、扩容等具体操作 集群搭建 2018年10月 Re...

分布式系统架构
26分钟前
5
0
JVM -- 垃圾回收算法及分代垃圾收集器

Hello,今天记录下 Java虚拟机中的其中一个重点知识 --> 垃圾回收算法及分代垃圾收集器。 一起学习,一起进步。继续沉淀,慢慢强大。希望这文章对您有帮助。若有写的不好的地方,欢迎评论给建...

猫狗熊
39分钟前
3
0
ERC-777以太坊新代币标准解读

ERC777是一个新的高级代币标准,可以视为ERC20的升级版本,因此它解决了ERC20以及ERC223存在的一些问题,开发者可以根据自己的具体需求进行选型。 1、使用ERC820进行合约注册 有别于ERC20的自...

汇智网教程
今天
8
0
代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部