laraval 实现消息队列

本文介绍如何使用PHP和Redis构建邮件发送队列,包括队列类的创建、控制器中实例化队列、监听队列及消费端的实现。

以 发送邮件,借助redis 做队列为例

 

1、app/Commands 文件夹建立 EmailQunene.php

namespace App\Commands;

use App\Commands\Command;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;

class EmailQuneue implements SelfHandling, ShouldQueue
{
    use InteractsWithQueue, SerializesModels;
    public $from;  //用成员属性接收需要参数
    public $to;
    public $message;
    public function __construct($arr)
    {
        $this->from = $arr['from'];
        $this->to = $arr['to'];
        $this->message = $arr['message'];
    }
    public function handle()
    {
        echo "\n".$this->from.' send email to '.$this->to.' message:'.$this->message;
    }
}

  

 

2、controller中实例化 队列类

//引入Queue 和消费类
use Queue;
use App\Commands\EmailQuneue;

//代码片段

$arr['from'] = 'a@qq.com’;
$arr['to'] = 'b@qq.com';
$arr['message'] = 'hello';
$messages = new EmailQuneue($arr);
Queue::pushOn('emailqueue',$messages); //消息push 进队列

  

3、监听队列,调用消费端

php artisan queue:listen --queue=emailqueue —tries=1

php artisan queue:work --queue=emailqueue  --daemon --sleep=1 --tries=1 守护进程模式,出错不会重试,存入数据库

listen 监听消费类动态加载,文件改变随时更新

work 开启守护进程加载消费类,文件修改,需要kill 掉进程重新开启

work 相对 listen 更节省cpu

 

4、push  queue 方法

pushOn($queue, $job, $data = ‘')  push进指定队列

laterOn($queue, $delay, $job, $data = ‘')  指定delay 时间后消费

转载于:https://www.cnblogs.com/loyal1986/p/5007784.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值