laravel5.5 消息队列

Laravel消息队列创建与引用

找了很久,也看了很多视频,但都比较散乱。所以总结以下!

关于Laravel的消息队列应用的场景就不多说了,B站的视频都有,接下来就是具体操作。

1.首先需要我们使用redis作为队列的介质,需要在laravel中将redis部署起来。
2.在laravel总目录下的env文件配置添加两行:QUEUE_CONNECTION=redis,
QUEUE_DRIVER=redis。
3.打开终端命令,切换到laravel项目目录下执行指令创建jobs队列
php artisan make:job ‘队列名称’(自己定义)
4.Jobs队列里面引用redis缓存进行事件处理。

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Redis;

class trade implements ShouldQueue
{
    
    
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    public $data;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($data)
    {
    
    
        //
        $this->data=$data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
    
    
        //
        Redis::throttle('key')->block(0)->allow(1)->every(5)->then(function (){
    
    
            info('Lock obtained...');
            //处理队列
            echo $this->data;
        },function (){
    
    
            //无法获取锁

            return $this->release(5);
        });
    }
}

5.根据上面的Jobs队列代码设置redis处理频率,在处理队列写业务所以。
6.在config/queue文件下面,‘connections’=>[…‘redis’=>[‘driver’ => ‘redis’,
‘connection’ => ‘default’,
‘queue’ => env(‘REDIS_QUEUE’,‘default’),
‘retry_after’ => 90,
‘block_for’=>null,]],
7.创建控制器,php artisan make:controller ‘控制器名称’,在控制器方法中引用队列。

class WebController extends Controller
{
    
    
    //
    public function index(Request $request){
    
    
//        $v = session('k1');
//        return $v.'ooo';
//        $v = Redis::get('k1');
//        return $v;
//        $data = [
//            'tid'=> date('Y-m-d H:i:s').uniqid(),
//            'name'=>'luke',
//            'address'=>'huang'
//        ];
//
//        $job = new trade($data);
//        $job->dispatch($job)->onQueue('trade');
//        return '订单的方法';
        for($i=0;$i<100;$i++){
    
    

            trade::dispatch('第'.$i.'个trade线程进入');
            echo '第'.$i.'个trade线程进入';
            pocess::dispatch('第'.$i.'个Pocess线程进入');
            echo '第'.$i.'个pocess线程进入';
        }
    }
}

8.控制器添加路由,启动项目开始访问。
9.php artisan serve启动项目,php artisan queue:work redis 执行redis队列
10.如果指定了名称php artisan queue:work redis --queue=‘所指定的名称’

相关链接: https://learnku.com/docs/laravel/6.x/queues/5168#e11144

图片: 启动redis队列在这里插入图片描述

如果没有指定单一队列名称,将会存放到默认队列中
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41429587/article/details/116201727