QueueServiceProvider
Laravel 各種服務的註冊大多都是透過各種 ServiceProvider 綁定的,佇列服務也不例外,開啟 namespace IlluminateQueueQueueServiceProvider 檔案定位到 register 方式產生了一個佇列任務類,該類別繼承了 namespaceAppJobsJob, 實作了介面 SelfHandling 和 ShouldQueue , 或許你會問這兩個介面啥規範都沒規定啥用啊(先略過),重點在兩個兩個介面trait 內, trait 內, trait 內, 對佇列任務實現了各種操作,刪除,重試,延遲等。
在分配任務的時候我們使用了輔助函數 dispatch ,其實是 IlluminateBus 下 Dispatcher 類的 dispatch方法public function register() { // 注册队列管理器 一旦实例化,为队列连接器注册各种解析器,这些连接器负责创建接受队列配置和实例化各种不同队列处理的类。 // 按照配置文件注册一个默认连接方式 在此使用 redis $this->registerManager(); // 注册队列各种命令 队列连接 重启等。 $this->registerWorker(); // 注册队列监听命令 $this->registerListener(); // 5.1后弃用 $this->registerSubscriber(); // 注册队列失败处理 $this->registerFailedJobServices(); // Register the Illuminate queued closure job. 什么用,后面再看。 $this->registerQueueClosure(); }在此,我們先看下 namespace IlluminateBusBusBusBusBusB53kd
上面任務進入隊列的整個流程就明白了。那任務出隊列呢?在文件中我們可以看到,我們透過執行 php artisan queue:work 這條語句進行佇列的監聽,那在此就看下 namespace IlluminateQueueConsoleWorkCommand::fire(),夜很深了,下面自己看吧!