A.队列的使用

1.队列配置文件存储在 config/queue.php 根据自己的情况进行配置

2..env文件 QUEUE_DRIVER=database(根据个人情况配置,redis等)

3.创建jobs表(不用数据库的可以不用建表)

  1. php artisan queue:table
  1. php artisan migrate
  2.  
  3. 4.创建任务文件
  1. php artisan make:job Testqueue
    会生成目录和文件app\Jobs\Testqueue.php
  1. namespace App\Jobs;
  2.  
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Queue\SerializesModels;
  5. use Illuminate\Queue\InteractsWithQueue;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Foundation\Bus\Dispatchable;
  8. use Illuminate\Support\Facades\DB;
  9.  
  10. class testqueue implements ShouldQueue
  11. {
  12. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  13.  
  14. /**
  15. * Create a new job instance.
  16. *
  17. * @return void
  18. */
  19. public function __construct()
  20. {
  21. //
  22. }
  23.  
  24. /**
  25. * Execute the job.
  26. *
  27. * @return void
  28. */
  29. public function handle()//handler里就是写业务逻辑的地方了,这里可以用type-hint依赖注入的方式,注入任何你需要的类。
  30. {
  31. //
  32. DB::table('tests')->insert(['name'=>'测试名字']);//这里是自己写代码
  33. }

5.自己建一个控制器

里面写代码

  1. public function login(Request $request){
  2. $this->dispatch(new testqueue());

访问此控制器后,在jobs中会有一条队列的记录

启动队列

  1. php artisan queue:work
    会把jobs表中数据删除 tests表中增加一条记录
    B.事件的使用
    Laravel 的事件提供了一个简单的观察者实现,能够订阅和监听应用中发生的各种事件。事件类保存在 app/Events 目录中,而这些事件的的监听器则被保存在 app/Listeners 目录下。这些目录只有当你使用 Artisan 命令来生成事件和监听器时才会被自动创建。

注册事件和监听器

Laravel 应用中的 EventServiceProvider 有个 listen 数组包含所有的事件(键)以及事件对应的监听器(值)来注册所有的事件监听器,可以灵活地根据需求来添加事件。例如,让我们增加一个 OrderShipped 事件:

  1. /**
  2. * 应用程序的事件监听器映射。
  3. *
  4. * @var array
  5. */
  6. protected $listen = [
  7. 'App\Events\OrderShipped' => [
  8. 'App\Listeners\SendShipmentNotification',
  9. ],
  10. ];

生成事件 & 监听器

  1. php artisan event:generate
    会生成App\Events\目录和OrderShipped.php
    同时生成App\Listeners\SendShipmentNotification.php

手动注册事件

事件通常是在 EventServiceProvider 类的 $listen 数组中注册,但是,你也可以在 EventServiceProvider 类的 boot 方法中注册基于事件的闭包:

  1. /**
  2. * 注册应用程序中的任何其它事件。
  3. *
  4. * @return void
  5. */
  6. public function boot()
  7. {
  8. parent::boot();
  9. Event::listen('event.name', function ($foo, $bar) {
  10. //
  11. });
  12. }

通配符事件监听器

你可以在注册监听器时使用 * 通配符参数,这样能够在同一个监听器上捕获多个事件。通配符监听器接受事件名称作为其第一个参数,并将整个事件数据数组作为其第二个参数:

  1. Event::listen('event.*', function ($eventName, array $data) {
  2. //
  3. });
  4. 其他操作同队列一样
  1. C.

事件订阅(Event Subscribers)

Event Subscribers是一种特殊的Listener,前面讲的是一个listener里只能放一个hander(),事件订阅可以把很多处理器(handler)放到一个类里面,然后用一个listner把它们集合起来,这样不同的事件只要对应一个listner就可以了。

  1. <?php
  2. namespace App\Listeners;
  3. class UserEventListener
  4. {
  5. /**
  6. * Handle user login events.
  7. */
  8. public function onUserLogin($event) {}
  9. /**
  10. * Handle user logout events.
  11. */
  12. public function onUserLogout($event) {}
  13. /**
  14. * Register the listeners for the subscriber.
  15. *
  16. * @param Illuminate\Events\Dispatcher $events
  17. * @return array
  18. */
  19. public function subscribe($events)
  20. {
  21. $events->listen(
  22. 'App\Events\UserLoggedIn',
  23. 'App\Listeners\UserEventListener@onUserLogin'
  24. );
  25. $events->listen(
  26. 'App\Events\UserLoggedOut',
  27. 'App\Listeners\UserEventListener@onUserLogout'
  28. );
  29. }
  30. }

看后面的subscribe(),每个事件和处理器是一一对应的。

绑定 Event Subscriber到Service Provider

  1. <?php
  2. namespace App\Providers;
  3. use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
  4. use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
  5. class EventServiceProvider extends ServiceProvider
  6. {
  7. /**
  8. * The event listener mappings for the application.
  9. *
  10. * @var array
  11. */
  12. protected $listen = [
  13. //
  14. ];
  15. /**
  16. * The subscriber classes to register.
  17. *
  18. * @var array
  19. */
  20. protected $subscribe = [
  21. 'App\Listeners\UserEventListener',
  22. ];
  23. }
  1.  

laravel队列,事件简单使用方法的更多相关文章

  1. Laravel 队列的简单使用例子

    场景: 在一个a系统中注册一个用户时,发送请求到b系统中也注册一个相同信息的账号,考虑到网络有可能错误的原因,所以使用队列去处理 1.修改根目录 .env 文件的QUEUE_CONNECTION字段配 ...

  2. Laravel 队列功能 简单应用

    生成任务类 默认情况下,应用程序的所有可排队任务都存储在 app/Jobs 目录下.如果 app/Jobs 目录不存在,则会在运行 make:job Artisan 命令时将创建它.你可以使用 Art ...

  3. PHP Laravel 中使用简单的方法跟踪用户是否在线

    今天,我的任务是,在 Laravel 应用程序用户个人资料页面上,用户名旁边添加一个绿点,表示他们是否在线.我首先想到的是,我们将需要启动一个 node.js 服务器并跟踪每个用户的活动套接字连接.然 ...

  4. iOS中响应者链条-触摸事件,hitTest方法坐标转换

    总体来说,分2个步骤: 一,从上到下寻找合适的控件来处理这个触摸事件.如下图,如果点击了黄色4,则UIApplication -> UIWindow -> 1白色 -> 2橙色 -& ...

  5. TODO:Laravel 内置简单登录

    TODO:Laravel 内置简单登录 1. 激活Laravel的Auth系统Laravel 利用 PHP 的新特性 trait 内置了非常完善好用的简单用户登录注册功能,适合一些不需要复杂用户权限管 ...

  6. NGUI之Slider,最简单的方法做进度条。

    既然标题是最简单的,那么很多东西就不需要我们自己做了,使用的是NGUI的示例,只针对初学者,接下来让我们来做一个最简单游戏设置里的声音控制. 1.导入NGUI: 2.找到NGUI的Menu示例Demo ...

  7. swfobject.js 2.2简单使用方法

    swfobject.js 2.2简单使用方法 官方网址介绍http://code.google.com/p/swfobject/wiki/documentation 用法:html部分<div ...

  8. Laravel 模型事件入门

    Laravel 模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除. Laravel 模型事件文档 概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨 ...

  9. iscroll.js的简单使用方法(总结)

    iscroll.js的简单使用方法(总结) 一.总结 一句话总结:Scroll是一个类,每个需要使用滚动功能的区域均要进行初始化. 最佳的HTML结构如下: <div id="wrap ...

随机推荐

  1. Linux命令(二十五) 磁盘管理命令(三) fdisk

    一.fdisk命令介绍 fdisk 为Linux系统下的分区管理工具,类型windows下的 分区助手等工具软件.分过区装过操作系统的人都知道硬盘分区是必要和重要的.fdisk 的帮助如下所示: [r ...

  2. CUDA ---- 线程配置

    前言 线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式: 2D grid 2D block 线程索引 矩阵在memory中是row-major线性存储的: 在k ...

  3. Codeforces Round #426 (Div. 1) B The Bakery (线段树+dp)

    B. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...

  4. 【洛谷】NOIP2018原创模拟赛DAY1解题报告

    点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...

  5. 【刷题】LOJ 6121 「网络流 24 题」孤岛营救问题

    题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...

  6. 【AI科技大本营】

    从AutoML.机器学习新算法.底层计算.对抗性攻击.模型应用与底层理解,到开源数据集.Tensorflow和TPU,Google Brain 负责人Jeff Dean发长文来总结他们2017年所做的 ...

  7. 浅谈使用NIO,AIO的感受

    花了十多天的时间把原来的WEB服务由BIO(阻塞IO)模式改写成NIO(非阻塞IO)模式,然后在xp机子上用ab测试并发性能,确实提升了30%左右的并发性能,测试完成后,当时感觉还是挺满意的.几天前在 ...

  8. python命名空间与闭包函数详解

    python命名空间与闭包函数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍的知识点如下: 1>.三元运算 2>.命名空间 3>.globa ...

  9. json字符串转java对象

    今天遇到一个问题,前端ajax获取到一个javaBean对象,好多方法发ajax请求需要把这个对象再传到后端,后端再根据这个对象进行操作(之前计划传递id,但发现传递id的话,后端多个方法都需要根据i ...

  10. jquery使用ajax

    前端jquery使用ajax的几种方法: $.ajax使用: $.ajax({ url:'/test_ajax', #发送url data:{a:,b:,csrfmiddlewaretoken:'{{ ...