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

概述



队列概念:略,不知道的自行解决。(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 代码内容如下:

<?php

namespace 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 中进行的调用。还是贴以下源码吧:

<?php

namespace 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,这个让我理解了很久才理解的概念。

转载请注明出处(估计这句话并没有卵用)

时间: 2024-10-28 07:56:32

Laravel学习三:laravel队列使用教程的相关文章

Laravel学习笔记(三)--在CentOS上配置Laravel

在Laravel框架上开发了几天,不得不说,确实比较优雅,处理问题逻辑比较清楚. 今天打算在CentOS 7上配置一个Laravel,之前都是在本机上开发,打算实际配置一下. 1)系统上已经安装了Apache.PHP.mysql,安装命令为yum install httpd php mysql 因为CentOS 7自带的php模块很少,如果需要增加模块,需要编译才行,所以需要php-devel模块,用yum install php-devel命令就可以了. 2)安装laravel a)安装com

LARAVEL学习--安装

之前一直使用Codeignitor框架进行PHP的开发,Codeignitor是一个非常优秀的框架,上手简单,文档极其友好,流行程度甚高(这带来了很好的社区支持+云环境支持),很轻量,可扩展性佳,性能也不错.但它有两个问题: 1.快糙猛(当然这也是PHP的本来特点),不够优雅(有悖最佳实践),也有点老了(CI 2也一样),跟不上新的行业标准(PSR-0/Composer) 2.前景堪忧,CI作者已经放弃更新了. 所以我重新搜索了当今流行的PHP框架. Sitepoint网站做了一个小的调查,看看

Laravel学习笔记目录

伴随自己学习.使用laravel的过程,记录下遇到过的问题与思考.与程序猿们共勉,知识的道路没有止境,我们一直都在学习的路上. 第一部分:入门级 这部分文章写得都是比较浅显的,属于纯粹的使用,我也不知道自己什么时候能够登堂入室.先这么写着吧.后面的项目会用到利用laravel来进行app的服务端开发.到时可能也开一个专栏专门说说app服务端开发的那些事儿. 1. Laravel5学习笔记:Composer.json配置文件说明 2. Laravel5学习笔记:执行route:cache时报Log

《PHP框架Laravel学习》系列分享专栏

<PHP框架Laravel学习>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201735.html 文章 Laravel教程:laravel 4安装及入门 Laravel4中文手册下载 Laravel配置教程 Laravel生命周期介绍 Laravel路由教程 Laravel请求和输入 Laravel响应和视图 Laravel控制器 PHP开发框架Laravel数据库操作方法总结 Laravel框架数据库CURD操作.连贯操作总结 L

Laravel学习

Laravel是个很强大的PHP框架,它剔除了开发中Web开发中比较痛苦的过程,提供了验证(authentication),路由(routing),Session和缓存(caching)等开发过程中常用到的工具或者功能. Laravel的配置都存放在app/config中. 里面所有的*.php都按照return的形式返回数据,那么就可以使用Config::get("key")来获取配置.使用Config::set("key", "value")

laravel 学习笔记 —— 神奇的服务容器

转载自:https://www.insp.top/learn-laravel-container 容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存放的不是文本.数值,而是对象.对象的描述(类.接口)或者是提供对象的回调,通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是 “解耦” .“依赖注入(DI)”.本文就从这里开始. IoC 容器, laravel 的核心 Laravel 的核心就

学习ASP .NET MVC5官方教程总结(三)添加视图

学习ASP .NET MVC5官方教程总结(三)添加视图 在上一章中我们讲了MVC中的"C",控制器Controllers,这一章我们来讲"V",视图Views的知识. 首先,打开我们的项目,打开我们的HelloWorldController,并修改Index(): <span style="font-size:14px;">public ActionResult Index() { return View(); }</span

搭建Laravel项目集成开发环境简明教程

phpRE+Composer+PhpStorm+Laravel安装与配置 既然人生苦短,我们还是尽量不要浪费大家的宝贵时光.你可能体验了"著名的WordPress五分钟建站",下面你即将体验到的是从没有搭建PHP运行开发环境phpRE的干净计算机上(当然搭建了也无妨)"5分钟一键安装创建Laravel项目".先在官网下载phpRE完整一键安装包phpRE_setup.exe,再"下一步下一步傻瓜安装"成功后,在浏览器地址栏输入本地虚拟主机就见到&

Laravel 集成 RabbitMQ 消息队列

目录 消息队列 RabbitMQ docker 部署 RabbitMQ 操作步骤 访问管理界面 Laravel 集成 RabbitMQ Laravel 5.2 Laravel 5.5 消息队列 消息(Message)是指在应用间传送的数据.可以只包含文本字符串,也可以嵌入对象. 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递. 消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的