場景:
在一個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的隊列文檔
