摘要:導語之前在寫事件監聽器的實例,數據都是直接入庫的,實際這一步可以放到隊列中去執行。隊列有多種驅動可以選擇,這里就使用。創建隊列使用即可創建隊列文件,最終生成文件功能只是數據入庫,代碼很簡單。
導語
之前在寫事件/監聽器的實例,數據都是直接入庫的,實際這一步可以放到隊列中去執行。laravel 隊列有多種驅動可以選擇,這里就使用 redis。
創建隊列使用 php artisan make:job BrowseLogQueue 即可創建隊列文件,最終生成 Jobs/BrowseLogQueue.php 文件
功能只是數據入庫,代碼很簡單。需要注意的是,可以在類中指定最大失敗次數等配置,代碼如下
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 AppModelsBrowseLog(); $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 進程守護,下篇文章繼續。
參考資料:隊列。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31223.html
摘要:一旦這一切完成,方法會運行在類屬性在命令構造后設置容器解析實例,在中我們設置了將使用的緩存驅動,我們也根據命令來決定我們調用什么方法。作業只在以上起效在上也無效處理作業方法調用觸發事件觸發事件。 譯文GitHub https://github.com/yuansir/diving-laravel-zh 原文鏈接https://divinglaravel.com/queue-system...
摘要:原文鏈接我們推送到隊列的每個作業都存儲在按執行順序排序的某些存儲空間中,該存儲位置可以是數據庫,存儲或像這樣的第三方服務。這個數字從開始,在每次運行作業時不斷增加。 原文鏈接https://divinglaravel.com/queue-system/preparing-jobs-for-queue Every job we push to queue is stored in som...
摘要:如果任務沒有在規定時間內完成,那么該有序集合的任務將會被重新放入隊列中。這兩個進程操縱了三個隊列,其中一個,負責即時任務,兩個,負責延時任務與待處理任務。如果任務執行成功,就會刪除中的任務,否則會被重新放入隊列中。 在實際的項目開發中,我們經常會遇到需要輕量級隊列的情形,例如發短信、發郵件等,這些任務不足以使用 kafka、RabbitMQ 等重量級的消息隊列,但是又的確需要異步、重試...
閱讀 2966·2021-10-20 13:46
閱讀 2517·2021-08-12 13:22
閱讀 2700·2019-08-30 15:54
閱讀 2340·2019-08-30 15:53
閱讀 545·2019-08-30 13:47
閱讀 3581·2019-08-23 16:56
閱讀 1726·2019-08-23 13:02
閱讀 1795·2019-08-23 12:25