thinkphp6折腾swoole之消息队列(think-queue)与定时任务

方滴云WEB2023-04-11 17:34

折腾完think-swoole的http与websocket,接下来当然就是折腾消息列队与定时任务了,这里消息列队是借助think-queue来实现的,而定时任务则是使用swoole/Timer来实现毫秒级的定时任务的。

1. 消息列队

这个部分可以在上think-swoole的readme里查看下,安装命令如下:composer require topthink/think-queue,具体可以参考:https://github.com/top-think/think-queue。

安装成功后,在config目录下会多一个queue.php文件,这里我使用的redis,具体的配置如下所示:

之后,我的操作是将swoole.php中关于queue的配置项目'enable' => true,然后在控制台重新运行:php think swoole,即可。

关于这个workers,确实是不太理解要怎么玩,反正我们这样配置后,一切可以正常的玩了。

接下搂的工作就比较简单的了,按官方文档的示例去新建两个小任务用于测试,第一个文件是单任务的,第二是有两个小任务的,只是在发布的时候稍有不同。如下 图所示,发布任务。

一个是立即执行的,另一个是延时执行的,需要注意的是,要处理任务最大的重试次数,以及任务执行完成后,一定要销毁它,不然会一直执行的,如下图所示。

当然我们也可以通过redis的数据管理器查看数据情况,如果用宝塔,有个默认的管理的端口,使用还是非常方便的。

2. 定时器

这里定时器我们是通过swoole/Timer这个类来实现毫秒级的定时任务。这里也是通过事件来启动定时器的。这里要感谢CRMEBPRO,我们是通过学习他们的源码来实现的。

首先我们在app目录下找到event.php,然后监听SWOOLE的初始化与启动,因为专业知识有限,发现好像在初始化的时候,swoole/Timer类执行会有问题的了。

接下来就是要去实现启动的事件监听了,为了方便看,代码也是非常的简单的,就是在做了一个事件发布,然后我们再一个监听来监听发布的事件。

接下来来实现crontab监听类,简单的代码发下所示

这里要特别说明下:app\listener\Cron这个类,是在CRMEBPRO版本源码中借的。准确的说,这部分的代码基本都是借的啦。到这里,接下来的开发工作就都顺理成章啦。