队列异步任务其实并不神秘。我一开始接触TP框架的队列功能时,也以为需要写很多复杂的配置代码,结果发现官方在最新版本里已经把流程简化了不少。简单来说,队列就是把耗时任务扔到后台慢慢跑,用户不用卡在页面一直等。
要开始用队列,你得先确认自己的TP版本是不是支持Queue扩展。打开项目根目录下的composer.json,看看有没有require topthink/think-queue。如果没有,先通过composer安装这个包,这一步很多新手会忘记,但其实最基础。
装好之后别急着写代码,先去config目录下找到queue.php配置文件。这里面要设置驱动类型,我建议业务量不大的项目先用redis,简单又稳定。填好redis连接地址,再设置一个队列名称,比如“task_queue”,这样代码才知道任务往哪塞。
真正用起来其实就两步。第一步,创建一个任务类,继承官方提供的基类,在fire方法里写你要执行的业务逻辑,比如发送短信、处理图片这些。第二步,在控制器里调用Queue::push方法,把任务对象推送到队列里。推完之后,页面立刻返回成功。
跑任务的时候别忘了启动消费端。在命令行执行php think queue:work --queue task_queue,这样队列里的任务才会被真正执行。我建议上线后用supervisor守护这个进程,防止意外终止。
