Heim >Backend-Entwicklung >PHP-Tutorial >Laravel学习三:laravel队列使用教程

Laravel学习三:laravel队列使用教程

WBOY
WBOYOriginal
2016-06-23 13:32:20823Durchsuche

概述

队列概念:略,不知道的自行解决。(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,这个让我理解了很久才理解的概念。

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn