一、前言
公司项目里面用到了推送等第三方库,为了更快速的响应,决定将推送功能放入消息队列中处理。那么,如何做消息队列呢?通过网上资料,找到以下几种方案:
1)PHP+redis自己做消息队列
2)PHP-Resque
3)MemcacheQ
4)RabbitMQ
最后我们选了第二种方案,因为PHP-Resque是现成的框架,比第一种方案要方便,第二是由于我们的消息队列服务要求比较轻量级,PHP-Resque刚好满足我们的要求。
那么,开始了。
二、环境搭建
有关PHP-resque的原理可以参考文章:http://avnpc.com/pages/run-background-task-by-php-resque
1)PHP-Resque必须运行在Linux环境下,所以先找一台Linux服务器吧
2)安装PHP的Redis扩展:安装方式网上自行搜索,安装完之后用phpinfo查看Redis扩展是否安装成功
3)需要支持PCNTL函数,可以写个脚本:
echo pcntl_fork();
检验是否支持pcntl函数。若不支持,去安装。我默认安装的php环境就支持这个函数。
4)安装Redis:安装方式网上很多,这里不再赘述
三、集成
1、可以用composer安装,十分方便。
composer require chrisboulton/php-resque
2、Job、Queue、Worker
熟悉PHP-resque的原理之后,都明白PHP-resque是由三个角色组成的:Job、Queue、Worker;其中Job负责处理对应事件的逻辑,Queue用于接收队列消息,Worker常驻内存,循环POP队列中的服务。
PHP-resque提供了一个简单的demo,里面实现了Job、Queue和Worker的逻辑,完全可以参考demo的逻辑来处理你自己的逻辑。
Job类:
以上是我实现消息推送