Laravel5.5之事件监听、任务调度、队列

一、事件监听

流程:

clipboard.png

1.1 创建event

php artisan make:event UserLogin

LoginController.php

    /*** The user has been authenticated.** @param  \Illuminate\Http\Request  $request* @param  mixed  $user* @return mixed*/protected function authenticated(Request $request, $user){event(new UserLogin($user));}

1.2 创建listener

1.2.1 方式一:手动创建

php artisan make:listener EmailAdminUserLogin --event=UserLogin

1.2.2 方式二:推荐如下方式:自动生成事件和监听

//应用程序的事件监听器映射class EventServiceProvider extends ServiceProvider
{/*** The event listener mappings for the application.** @var array*/protected $listen = ['App\Events\UserLogin' => ['App\Listeners\UserLogin\EmailAdminUserLogin','App\Listeners\UserLogin\TraceUser','App\Listeners\UserLogin\AddUserLoginCounter',],'App\Events\UserLogout' => ['App\Listeners\UserLogout\EmailAdminUserLogout','App\Listeners\UserLogout\TraceUser',],];/*** Register any events for your application.** @return void*/public function boot(){parent::boot();Event::listen('event.*', function ($eventName, array $data) {//});}
}   

生成事件 & 监听器:php artisan event:generate

二、Laravel 的任务调度(计划任务)功能 Task Scheduling

2.1 call方式

protected function schedule(Schedule $schedule){$schedule->call(function (){\Log::info('我是call方法实现的定时任务');})->everyMinute();}

执行:php artisan schedule:run

2.2 crontab方式

clipboard.png

2.2 command方式

生成命令:php artisan make:command SayHello

<?phpnamespace App\Console\Commands;use Illuminate\Console\Command;class SayHello extends Command
{/*** The name and signature of the console command.** @var string*/protected $signature = 'message:hi';/*** The console command description.** @var string*/protected $description = 'Command description';/*** Create a new command instance.** @return void*/public function __construct(){parent::__construct();}/*** Execute the console command.** @return mixed*/public function handle(){//书写处理逻辑\Log::info('早上好,用户');}
}

Kernel.php

protected function schedule(Schedule $schedule)
{$schedule->command('message:hi')->everyMinute();
}

执行:php artisan schedule:run

三、队列任务

3.1 驱动的必要设置

    QUEUE_DRIVER=database

如:数据库驱动

php artisan queue:tablephp artisan migrate

3.2 创建任务

     生成任务类:

php artisan make:job SendReminderEmail
class SendReminderEmail implements ShouldQueue
{use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;public $user;/*** Create a new job instance.** @param User $user*/public function __construct(User $user){$this->user = $user;}/*** Execute the job.** @return void*/public function handle(){\Log::info('send reminder email to user' . $this->user->email);}
}

3.3 分发任务

    你写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:
利用模型工厂生成30个用户:

clipboard.png

    public function store(Request $request){$users = User::where('id','>',24)->get();foreach ($users as $user){$this->dispatch(new SendReminderEmail($user));}return 'Done';}
Route::get('/job', 'UserController@store');

数据库表jobs生成5个队列任务:

clipboard.png

3.4 运行队列处理器

php artisan queue:work

Tips:要注意,一旦 queue:work 命令开始,它将一直运行,直到你手动停止或者你关闭控制台

处理单一任务:你可以使用 --once 选项来指定仅对队列中的单一任务进行处理

php artisan queue:work --once

clipboard.png

拓展:使用 Beanstalkd 管理队列,Supervisor 则是用来监听队列的任务,并在队列存在任务的情况下自动帮我们去执行,免去手动敲 php artisan 的命令,保证自己的队列可以正确执行

致谢

谢谢你看到这里,有什么问题可以在评论区留言交流,谢谢!

参考文档:Laravel5.5 的事件系统
参考视频01:Coding 10编程原动力 - Laravel5.5 事件监听
参考视频02:Coding 10编程原动力 - Laravel5.5 定时任务
参考视频03:轻松使用 Laravel 队列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

朱江洪功成身退 朱董配解体谁主格力(图)

摘要&#xff1a;中国家电营销委员会副理事长洪仕斌向时代周报记者表示&#xff1a;“朱江洪和董明珠已经完成了他们在格力发展前二十年的使命。“朱董配”解体之后&#xff0c;有人质疑格力“技术营销”的格局必将被打破&#xff0c;难以延续&#xff0c;“董氏班底”与朱江洪…

一些dos下简单命令

(1)切换盘符 d: 回车 (2)显示某目录下的所有文件或者文件夹(掌握) dir 回车 (3)创建文件夹 md 文件夹名称 回车 (4)删除文件夹 rd 文件夹名称 回车 (5)进入目录(掌握) 单级进入 cd 目录名称 多级进入 cd 目录名称1\目录名称2\... (6)回退目录(掌握) 单级回退 cd.. …

ssh服务器拒绝了密码 请再试一次 Xftp5连接失败

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我的情况都很简单&#xff1a; 第一回主机 ip 不对&#xff0c; 第二次 是账号、密码都不对。 最后 IP、账号、密码都对了 就连上了。

后端DTO(数据传输对象)与DAO(数据库数据源对象)解耦的好处

我们在后端的开发中经常会将DO对象传到Service层直接作为DTO传给前端&#xff0c;这样做其实会有很多弊端。 &#xff08;一&#xff09;DO对象一般其成员域和数据库字段是对应的&#xff0c;所以不能添加额外的字段&#xff0c;但是有时候端就是需要这个字段。反之前端要向后…

【刷算法】字符串的全排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 分析 没啥好分析的了&#xff0c;这个题不会&#xff0c;上网查的思路&#xff0c;大概就是&#xff1a; abc分化…

BZOJ.2741.[FOTILE模拟赛]L(分块 可持久化Trie)

题目链接 首先记\(sum\)为前缀异或和&#xff0c;那么区间\(s[l,r]sum[l-1]^{\wedge}sum[r]\)。即一个区间异或和可以转为求两个数的异或和。 那么对\([l,r]\)的询问即求\([l-1,r]\)中某两个数异或的最大值。 区间中某一个数和已知的一个数异或的最大值可以用可持久化Trie \(O(…

传腾讯人事大地震 马化腾将重整公司架构

摘要&#xff1a;5月17日消息&#xff0c;传腾讯董事长马化腾将重新组织公司架构&#xff0c;为腾讯大换血。据悉&#xff0c;腾讯之所以选择互动娱乐部门负责人接任这一重要岗位&#xff0c;也是因为互娱部门业绩持续快速发展&#xff0c;成为了“腾讯帝国”发展的核心驱动力之…

阿里云对象存储OSS与文件存储NAS的区别

一、简介 应用场景&#xff1a;选择一款存储产品&#xff0c;面向文档数据的存取&#xff0c;不会涉及到数据处理。 产品选型主要从OSS和NAS中选择一款&#xff0c;满足文档存储的需求。 二、NAS优缺点 NAS 是一种采用直接与网络介质相连的特殊设备实现数据存储的机制。由于这些…

Thread.yield()

&#xff08;一&#xff09;java yield()方法注释&#xff1a; /*** A hint to the scheduler that the current thread is willing to yield* its current use of a processor. The scheduler is free to ignore this* hint.** <p> Yield is a heuristic attempt to im…

WSDL 详解

转载自&#xff1a;http://kalogen.javaeye.com/blog/418958 WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application&#xff0c;他将Web服务描述定义为一组服务访问点&#xff0c;客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服…

MySQL数据类型char与varchar中数字代表的究竟是字节数还是字符数?

https://blog.csdn.net/zyz511919766/article/details/51682407 转载于:https://www.cnblogs.com/zquan/p/9723082.html

传苹果新iPhone显示屏4英寸 可视面积扩大30%

摘要&#xff1a;北京时间5月17日凌晨消息&#xff0c;据熟知内情的消息人士周三称&#xff0c;苹果计划为其下一代iPhone使用更大的显示屏&#xff0c;并已开始从韩国和日本供应商那里订购新的显示屏。业绩人士指出&#xff0c;苹果为下一代iPhone配备更大显示屏的决定意味着&…

Ztree

引入css和js <link rel"stylesheet" href"/${appName}/commons/jslib/ztreeV3.5.15/css/zTreeStyle/zTreeStyle.css" type"text/css"></link> <script type"text/javascript" src"/${appName}/commons/jslib/ztre…

通过IDE生成和手动call调用webservice

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 通过IDE自动生成的代码调用webservice服务 我们的IDE一般来说都是能够通过各种各样的工具来支持我们的开发使我们的开发变得更加的便捷。…

前端性能优化之Lazyload

前端性能优化之Lazyload (Mob前端-冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload 简介 前端工作中&#xff0c;界面和效果正在变得越来越狂拽炫酷&#xff0c;与此同时性能也是不得不提的问题。有些项目&#xff0c;页面长&#xff0c;图片多&#xff0c;内容丰富。像商城…

mysql查最大字符串

select MAX(comp_code0) from t_base_company字符串 0 把字符串转成数字转载于:https://www.cnblogs.com/feifeicui/p/9726401.html

中国联通被指乱扣费 返还金额限制用

摘要&#xff1a;宋先生的联通卡开通的是30G加100MB流量的套餐&#xff0c;宋先生上网认真核实了手机清单&#xff0c;发现近期上网流量从未超出。这回联通客服的解释是&#xff1a;“乱扣的费用已经在4月29日返还到你的卡里&#xff0c;这笔费用为‘隐藏扣费’&#xff0c;你是…

JAVA使用FTPClient类读写FTP

见&#xff1a;http://blog.csdn.net/kardelpeng/article/details/6588284 1.首先先导入相关jar包 2.创建一个连接FTP的工具类FTPUtil.Java [java] view plaincopy package com.metarnet.ftp.util; import java.io.IOException; import java.io.InputStream; import j…

揭秘一线互联网企业 前端JavaScript高级面试

第1章 课程介绍本章主要介绍课程的知识大纲&#xff0c;每个章节的解决顺序和主要内容。1-1 导学1-2 课程重要提示1-3 架构 第2章 ES6 语法本章主要讲解工作中最常用的 ES6 语法&#xff0c;包括 Module Class Promise 等语法&#xff0c;还会介绍使用 babel webpack rollup 来…

Java IO类库之ObjectInputStream和ObjectOutPutStream

2019独角兽企业重金招聘Python工程师标准>>> 一、ObjectOutputStream 1 - ObjectOuputStream介绍 ObjectOutputStream(对象字节输出流)&#xff0c;用于将一个序列化对象写入到创建ObjectOutputStream时传入的底层字节输入流中&#xff0c;通过源码可知该类继承Outp…