内容简介:之前在写事件/监听器的实例,数据都是直接入库的,实际这一步可以放到队列中去执行。laravel 队列有多种驱动可以选择,这里就使用 redis。将监听器最后一步就是运行队列,执行
导语
之前在写事件/监听器的实例,数据都是直接入库的,实际这一步可以放到队列中去执行。laravel 队列有多种驱动可以选择,这里就使用 redis。
创建队列
- 使用
php artisan make:job BrowseLogQueue
即可创建队列文件,最终生成Jobs/BrowseLogQueue.php
文件 - 功能只是数据入库,代码很简单。需要注意的是,可以在类中指定最大失败次数等配置,代码如下
<?php /** * 浏览记录入库 */ namespace App\Jobs; use App\Events\NotifyAdmin; use App\Models\BrowseLog; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Exception; class BrowseLogQueue implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; // 最大失败次数 public $tries = 5; // 超时 public $timeout = 120; protected $ip_addr; protected $request_url; protected $city_name; protected $created_at; protected $updated_at; /** * Create a new job instance. * * @return void */ public function __construct($ip_addr, $request_url, $city_name, $now) { $this->ip_addr = $ip_addr; $this->request_url = $request_url; $this->city_name = $city_name; $this->created_at = $now; $this->updated_at = $now; } /** * Execute the job. * * @return void */ public function handle(BrowseLog $browseLog) { $log = new $browseLog; $log->ip_addr = $this->ip_addr; $log->request_url = $this->request_url; $log->city_name = $this->city_name; $log->created_at = $this->created_at; $log->updated_at = $this->updated_at; $log->save(); } /** * 任务失败 * @param Exception $exception */ public function failed(Exception $exception) { // 发送邮件,通知管理员 event(new NotifyAdmin($exception->getMessage())); } }
分发任务
将监听器 CreateBrowseLog.php
文件修改如下
/** * Handle the event. * * @param UserBrowse $event * @return void */ public function handle(UserBrowse $event) { // 本地访问不做记录 $arr = ['127.0.0.1']; if (!in_array($event->ip_addr, $arr)) { /*$log = new \App\Models\BrowseLog(); $log->ip_addr = $event->ip_addr; $log->request_url = $event->request_url; $log->city_name = $event->city_name; $log->save();*/ BrowseLogQueue::dispatch($event->ip_addr, $event->request_url, $event->city_name, now()); /*BrowseLogQueue::dispatch($event->ip_addr, $event->request_url, $event->city_name)->delay(now()->addMinute(1)); 延时添加 */ } }
运行队列
最后一步就是运行队列,执行 php artisan queue:work
运行没有问题,但是到此并没有结束,还需要使用 Supervisor 进程守护,下篇文章继续。
参考资料: 队列 。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- laravel 队列实例(二)
- Redis 实现队列原理的实例详解
- PHP+Redis 消息队列 实现高并发下注册人数统计的实例
- rabbitmq实现延时队列(死信队列)
- 消息队列(三)常见消息队列介绍
- 消息队列探秘 – RabbitMQ 消息队列介绍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
别怕,Excel VBA其实很简单(第2版)
Excel Home / 北京大学出版社 / 2016-7 / 59.00元
对于大部分没有编程基础的职场人士来说,在学习VBA时往往会有很大的畏难情绪。本书正是针对这样的人群,用浅显易懂的语言和生动形象的比喻,并配合大量插画,对Excel中看似复杂的概念和代码,从简单的宏录制、VBA编程环境和基础语法的介绍,到常用对象的操作与控制、执行程序的自动开关—对象的事件、设计自定义的操作界面、调试与优化编写的代码,都进行了形象的介绍。 本书适合那些希望提高工作效率的职场人士......一起来看看 《别怕,Excel VBA其实很简单(第2版)》 这本书的介绍吧!