1.在laravel项目中安装依赖
composer require predis/predis
2.项目根目录创建Test消费者文件
php artisan make:job TestJob
然后在 app\Jobs
目录下得到 TestJob.php 文件
其中 handle()
方法在队列任务执行触发
3.添加任务到队列
其他位置通过埋点触发
//点击量redis队列异步处理
TestJob::dispatch(['id' => 4])->onQueue('clickQueue'));
此处我们在 dispatch
方法内放入了一个数组,该数组在任务执行时可得到并使用;onQueue
方法指定了一个队列名称
回到TestJob.php文件
<?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 App\Models\Books;
class BookClickQueue implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $data;
/**
* Create a new job instance.
* @param $data
* @return void
*/
public function __construct($data = [])
{
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$data = $this->data;
if(empty($data['id'])){
echo "param error";
return;
}
Books::where('id',$data['id'])->increment('click_num');
echo "success";
}
}
4.命令行开启队列监听 clickQueue 队列
php artisan queue:work --queue=clickQueue
触发埋点命令行返回
[2019-09-26 08:06:16] Processing: App\Jobs\clickQueue
success[2019-09-26 08:06:16] Processed: App\Jobs\clickQueue
查看数据库click_num已更新。
5.延时任务
在某些情况下我们需要延时执行一些任务,delay
方法可以很好的协助我们完成这个操作。
TestJob::dispatch(['id' => 4])->delay(now()->addMinutes(2))->onQueue('clickQueue'));
2分钟后
[2019-09-26 08:06:16] Processing: App\Jobs\clickQueue
success[2019-09-26 08:06:16] Processed: App\Jobs\clickQueue
查看数据库click_num已更新。