yii2中加入消息队列全过程解析以及yii控制台使用

在开发项目的过程中需要向用户发送邮件,但是发送邮件需要耗费大量的时间,这样就会对用户造成很差的体验,所以使用到了消息队列,开始使用的是一个外国团队开发的消息队列。

https://packagist.org/packages/yiisoft/yii2-queue

yiisoft/yii2-queue

这个队列看上去就非常的高大上,但是研究了好几天无果,最后没办法果断放弃了这个插件,我们将矛头指向了另外一个扩展。

shmilyzxt/yii2-queue

这个扩展虽然没有上面那个强大,但是依旧可以正常使用。

首先打开这个扩展的页面

https://packagist.org/packages/shmilyzxt/yii2-queue

用composer安装扩展,安装完成后按照里面的教程进行配置,因为这边要使用yii控制台命令,所以配置的时候需要在console文件夹里面同时配置一份。

配置应该是非常简单的事情,按照里面的教程进行配置就可以了,主要就是这个yii控制台可能会有点迷惑,不知道该如何使用,其实也很简单。你只需要在你console/controllers文件夹中创建一个控制器就可以出现相应的命令了。

注意:配置中说要用到一个扩展就是predis,这个扩展是不需要安装PHP redis扩展就可以直接对redis进行操作的扩展,非常的。

predis 扩展包地址 https://packagist.org/packages/predis/predis

例如我在该文件夹中放入了一个work类

5ijiDSG8kx.png@!thumb740

 

温馨提示:类的名称一定要与文件的命名一样。

这样你在cmd命令行中敲出yii命令如下所示

GFD4tEPCjJ.png@!thumb740

看到图中最下面几行中是不是出现了一个worker/listen命令,这样你就可以使用这个命令了。

上面的消息队列教程中提到给提供了一个方法。

3X5nyZH4XW.png@!thumb740

这个提供的方法就是要放到work类中的方法,如上上图所示。

当你执行命令 yii worker/listen 的时候就开始监听了。

QHzea24wWJ.png@!thumb740

看到没有,已经开始执行了。当你的redis中通过它提供的方法插入数据时就会监听到内容执行你的任务,那么到底执行什么任务呢?

这里我也困惑了一段时间,其实执行的就是你push进去的类,如下

45ksKz6cH7.png@!thumb740

 

pF8iGQzSaG.png@!thumb740

 

对了,就是这个类,如果有任务的时候就会执行里面的handle方法。

一切看上去好像都很顺利,但是如果你把你的程序放到Linux上去怎么办呢?

你也要执行yii命令,但是你会发现Linux提示没有这个命令,怎么办啊?

其实很简单,前面加上个PHP就可以了。当然你的PHP是配置过环境变量的才行,不然你就只能自己指定PHP的路径了。

例如 

 

代码展示

  1. php yii worker/listen

注意:yii也是有路径的,我之所以直接写yii 是因为我就在yii的当前目录执行的。

但是又来了一个问题,你一关掉shell就会发现它停止监听了,我总不能老开着吧。这里可以使用nohup 具体使用方法如下

 

代码展示

  1. nohup php /你的项目路径/yii worker/listen default 10 128 3 0 &

执行后就可以了,它会形成一个进程在你Linux服务器里面,除非PHP文件里面自己die,不然它会一直执行下去。

转载于:https://my.oschina.net/u/3683692/blog/2222259

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值