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.pswp.cn/news/451161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451161.shtml
英文地址,請注明出處:http://en.pswp.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…