百度百科是这样说的php
“队列”是在传输过程当中保存数据的容器。
举几个生活中例子:html
回到正题:laravel
消息队列则是为大批量处理数据而准备的一个概念,他有不少实现方式,并非单一的代码结构。shell
这里有比较专业的一篇文章:
http://www.cnblogs.com/xuyata...数据库
还有适合新手揣摩的教程:
http://www.imooc.com/learn/852数组
废话说完了,完全进入正题:iphone
Laravel 为咱们提供了一个简单并很容易配置的队列类.异步
引用一点官方翻译的话:函数
Laravel 队列为不一样的后台队列服务提供统一的 API , 例如 Beanstalk,Amazon SQS, Redis,甚至其余基于关系型数据库的队列。 队列的目的是将耗时的任务延时处理,好比发送邮件,从而大幅度缩短Web请求和相应的时间。队列配置文件存放在 config/queue.php。 每一种队列驱动的配置均可以在该文件中找到, 包括数据库, Beanstalkd, Amazon SQS, Redis, 以及同步(本地使用)驱动。 其中还包含了一个null队列驱动用于那些放弃队列的任务。this
Laravel 在 5.4版本中直接提供了全局函数 dispatch(),你能够再任意地方调用。而且无需加载任何对象或者实例化类。 这个函数主要的用途就是将你的队列需求加入到指定的容器中(专业点的叫生产者,其实你大可理解为你在商城购物完排队结帐的时候)
Laravel神奇数据库迁移我就很少说了。我相信你知道。
php artisan queue:table php artisan migrate
执行完上面两条命令,费力打开 configqueue.php, key=default 的数组中使用env配置文件加载方式,laravel安装后默认为sync(同步),咱们须要改成异步(你如今能够暂时认为同步!=队列),这里咱们选择使用关系型数据库来实现队列
QUEUE_DRIVER=database
建立任务 = 搞一个生产者 = (其实就是写一个在队列中你想执行的业务逻辑),名字随意取,但最好遵照命名规范
php artisan make:job SendReminderEmail
这个生成的文件大概分2部分:__construct() 构造方法 , handle 队列执行方法(意思就是在队列执行的时候,就用你这里面写的代码)
class SendReminderEmail implements ShouldQueue { // 这块你不用搭理他 use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $name; /** * Create a new job instance. * * @return void */ public function __construct($name) { $this->name = $name; } /** * Execute the job. * * @return void */ public function handle() { DB::table('email')->insert([ 'name' => $this->name, 'img'=>1, 'sort'=>1 ]); } }
随后在控制器内使用dispatch方法调用便可,下面我则for循环建立了100个业务
public function index(Request $request) { for ($i = 0; $i <= 100; $i++) { dispatch(new SendReminderEmail("email" . $i)); } }
你经过数据迁移的数据表中就基本成这样了
消费者 = 队列处理 = (你在商城购物已经开始付钱了),使用下面命令则你开始消费,队列也会按照你上面的业务逻辑开始处理。处理完毕后当前任务会自动删除。
php artisan queue:work
基本就下面这个样
到此Laravel5.4 队列简单配置与使用就结束了。
更多专业吊炸天的教程请参考China Laravel
http://d.laravel-china.org/do...