折腾完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版本源码中借的。准确的说,这部分的代码基本都是借的啦。到这里,接下来的开发工作就都顺理成章啦。