安裝擴展 `composer -vvv require topthink/think-queue`
將`config/queue.php`切換為redis模式.
~~~
'default' => 'redis',
~~~
`config`下新建
<details>
<summary>job.php</summary>
~~~
<?php
//think-queue類名別名
return [
'job1' => 'app\job\Job1'
];
~~~
</details>
`app\job`下新建
<details>
<summary>Job1.php</summary>
~~~
<?php
namespace app\job;
use think\facade\Log;
use think\queue\Job;
class Job1
{
public function fire(Job $job, $data)
{
try {
$data['now']=time();
// 日志
Log::info(json_encode($data, 320));
// 如果任務執行成功后 記得刪除任務,不然這個任務會重復執行,直到達到最大重試次數后失敗后,執行failed方法
$job->delete();
// 也可以重新發布這個任務
// $job->release($delay = 0); // $delay 為延遲時間,單位為秒
} catch (\Exception $e) {
echo $e->getMessage();
}
}
public function failed($data)
{
// ...任務達到最大重試次數后,失敗了
}
}
~~~
</details>
在控制器中進行消息投遞
~~~
dump(Queue::push(config('job.job1'), ['push' => time()]));
//延遲任務(秒)
dump(Queue::later(5, config('job.job1'), ['push' => time()]));
~~~
在項目根目錄執行`php think queue:work`或者`php think queue:listen`即開始消費隊列.
兩種,具體的可選參數可以輸入命令加 --help 查看
> 可配合supervisor使用,保證進程常駐
更多內容請參考 https://blog.csdn.net/will5451/article/details/80434174