3. Laravel5学习笔记:laravel队列使用教程
来源:互联网 发布:安东尼戴维斯数据 编辑:程序博客网 时间:2024/06/05 21:00
概述
队列概念:略,不知道的自行解决。(PS:此处laravel version:5.1)
在app服务端开发中,常常会遇到此种情况:
某一个大的任务中,可以分割为1,2,3,4个小任务,其中2的完成依赖1,4的完成依赖2。那么1、2、4可以理解为一个事务,必须依次执行,否则任务无法完成。但是任务3,与1、2、4没有关系,可以单独完成,谁先谁后也没有影响。具体说以下任务就跟三是一个属性:消息推送,邮件发送等等。
消息队列的理解
对于这块,是属于典型的生产者/消费者模型。一个生产者程序制造任务,放进队列里,然后消费者程序去检查队列,发现了任务,就消费它。理论上理解通透了。来看看实际操作。
laravel实现的消息队列
官方文档:laravel的队列
1. 实现生产者
通过消息队列的模型,我们知道应该有一个生产者,那么在laravel中,该如何去构造这个生产者呢?很简单。
php artisan make:command PushMessage –queued
执行完后,可以在app目录下看到 app\Commands\PushMessage.php
,打开这个文件,会看到它集成了一个 Command
这个类,但是呢,我们这里并没有这个类(如果你用的是5.0版本,那么它是存在的,5.1就没有啦)。不要紧张,自己在新建一个 app\Commands\Command.php
代码内容如下:
<?phpnamespace App\Commands;abstract class Command{ //}
OK!,然后再次回到 app\Commands\PushMessage.php
这个文件,其中有一个方法 handle
,我们这里为了演示,就使用写文件的操作来进行啦。在其中写入以下内容
file_put_contents('D:/webApp/test.txt', 'hello world!');
到这里,生产者就写完了,找个控制器。将这个生产者生成的内容推进队列里边吧。我这里演示,是自己在 app\Http\Controllers\TestController.php
中进行的调用。还是贴以下源码吧:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Requests;use App\Http\Controllers\Controller;use Queue;use App\Commands\PushMessage;class TestController extends Controller{ /** * Display a listing of the resource. * * @return Response */ public function index() { Queue::later(60, new PushMessage());// 推进队列 return view('welcome'); }}
这里有两个点,需要注意:
① 这里我们使用的是Queue Facade,但是官方建议使用Bus Facade.两者效果一样,你自己权衡。
② 这里我为了查看效果,特意加了一个60s后,执行队列中的任务。
2. 队列数据表保存的地方
光生产出来不行的,还得有个地方把这些生产的产品保存起来。这里为了简单,我就使用数据库的方式吧。其他方式大家可以自己试试,都很容易。使用数据库,需要进行以下配置:
打开
config/queue.php
,更改默认队列驱动为数据库:default’ => env(‘QUEUE_DRIVER’, ‘database’)
配置好,你的数据库连接服务。这个就不说了。通过
config/app.php
来配置执行以下两条命令:
php artisan queue:table
php artisan migrate
命令的含义,就是在数据库中创建一个队列表,用来保存任务。
好的,保存任务的列表页搞好了。接下来就是要进行消费了。这就很简单啦。
3. 队列的消费者
这个消费者的概念,对应上官方文档就是 动队列监听服务 ,当它监听到有要执行的任务时,就会自动按照指定条件执行。
php artisan queue:listen
测试的队列服务
现在是来检验成果的时候了。以我本地环境为例。首先运行程序,产生几个任务:
在浏览器中打开:http://127.0.0.1/laravel/public/index.php
这个时候打开数据库,可看到如下内容:
然后观察运行监听程序的dos,当看到以下样子时,表示程序已经执行完毕:
这个时候,你去对应的目录,就会看到:test.txt
这个文件了。
好了,想要了解更深入,请参考官方文档吧。改变准备写下laravel的Facade,这个让我理解了很久才理解的概念。
Laravel5专题目录
- 3. Laravel5学习笔记:laravel队列使用教程
- 10.Laravel5学习笔记:Laravel中的批量赋值探索
- 8. Laravel5学习笔记:在laravel5中使用OAuth授权
- Laravel5.3使用学习笔记---路由
- Laravel5.3使用学习笔记---中间件
- Laravel5.3使用学习笔记---控制器
- Laravel5.3使用学习笔记--请求
- Laravel5.3使用学习笔记--响应
- Laravel 5.2 教程 - 队列
- Laravel5.5 使用Laravel Mix编译Less
- Laravel5学习笔记 【安装】
- Laravel5学习笔记
- Laravel5.3学习笔记
- 9.Laravel5学习笔记:在laravel中注册自己的服务到容器中
- ubuntu学习笔记(4)之laravel使用supervisor实现异步队列
- 12.Laravel5学习笔记:使用mongodb开发LBS应用
- laravel-admin安装完整教程laravel5.2版
- laravel使用mysql队列
- 雨松MOMO UGUI 之 全面理解图集与使用(三)
- 【趋势科技实习录】 PIT testing with OSCE11
- 虚拟继承与虚函数继承的内存布局
- leetcode--Word Break
- netty启动
- 3. Laravel5学习笔记:laravel队列使用教程
- Spring事务配置的五种方式
- 泛型的基本使用
- php魔术方法的使用(总结)
- ffmpeg和SDL的多媒体编程(一)制作屏幕录像
- 对监听静态注册配置的理解
- android平台的jni
- MFC多线程的创建方法总结
- Linux——杀掉进程