場景:
在一個a系統中注冊一個用戶時,發送請求到b系統中也注冊一個相同信息的賬號,考慮到網絡有可能錯誤的原因,所以使用隊列去處理
1.修改根目錄 .env 文件的QUEUE_CONNECTION字段配置 為database
Laravel可配置多種隊列驅動,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具體參見app/config/queue.php)
其中sync為同步,database為使用數據庫,后面三種為第三方隊列服務,最后一種為不使用隊列。
通過在 .env 中的 QUEUE_CONNECTION 選項,來決定選擇何種驅動。
如 QUEUE_CONNECTION=database 即為選擇數據庫驅動隊列。
其中sync為同步,database為使用數據庫,后面三種為第三方隊列服務,最后一種為不使用隊列。
通過在 .env 中的 QUEUE_CONNECTION 選項,來決定選擇何種驅動。
如 QUEUE_CONNECTION=database 即為選擇數據庫驅動隊列。

2.創建數據庫隊列表(database方式)
為了使用 database
隊列驅動,你需要一張數據表來存儲任務。
php artisan queue:table
php artisan migrate
生產一張隊列表
3.生成任務類
在你的應用程序中,隊列的任務類都默認放在 app/Jobs
目錄下。
如果這個目錄不存在,那當你運行 make:job
Artisan 命令時目錄就會被自動創建。
你可以用以下的 Artisan 命令來生成一個新的隊列任務:
php artisan make:job SynUser
4.在隊列類里面的handle方法中寫上業務邏輯(比如發送網絡請求,發送郵件等等,這里簡單寫個日志代替)
protected $message; /** * Create a new job instance. * * @return void */ public function __construct($message) { $this->message = $message; } /** * Execute the job. * * @return void */ public function handle() { \Log::info($this->message); }
5.在控制器中加入一個測試方法,直接調用隊列類的 dispatch方法,類似生產了一個任務
public function test() { SynUser::dispatch('發送請求到b系統生成賬號'); }
這時,由於隊列還沒開啟,數據庫的隊列表中會有一個任務,等待隊列啟動后執行
6.執行命令開啟隊列
php artisan queue:work
這時,隊列表中的任務執行后就會自動刪除了,類似消費了任務
以上是拋轉引玉的一個簡單例子,具體細節可以查看laravel的隊列文檔