基于Swoole Server 实现的Redis延时消息队列消费端

望着窗户外边阴沉沉的天,看着即将下大雨。心里有种莫名的难受,已经失业在家有一段时间了一天比一天抑郁,生活感觉着实无力,每天刷着各大招聘平台:拉钩、boss直聘。感觉到的都是无力的绝望,闲着也闲着,不如学习一点东西。

一、针对人群,Swoole 爱好者以及初学者入门。PS: 大神请无视,可以给点建议,在此说一声“谢谢”~

二、目前已经实现了订单超时自动取消归还库存。但因为失业在家已久,没有心情接着做下去了,就这样给大家看下吧!

三、这个消费端系统能解决的业务问题,订单超时自动取消归还库存、自动收货、自动评论、大量模板消息推送等等。

四、为什么我没有选择企业级RabbitMQ, KfaKa,因为我不会。安装过RabbitMQ但感觉小型系统也没必要使用,可以考虑

轻量级消息队列Beanstalkd,下载位置: https://beanstalkd.github.io/download.html

一、我们开始看下这个消息端系统的实现流程。

  1. worker 进程获取Redis 延时队列的订单数据,task 进程完成业务逻辑处理
  2. worker 主要负责Redis 连接以及Swoole Client 连接,task 就是DB的连接
  3. 然后把业务逻辑写在Job 对象

二、我们先来看下运行效果,在深入探讨吧

  1. 打开目录后,分别有两个目录appLib
  2. app目录主要写业务逻辑,Lib是实现的代码
  3. 打开app目录,如图:
  4. 基于Swoole Server 实现的Redis延时消息队列消费端
  5. cofnig 配置文件、db 数据库业务  functions 自定义函数  service 业务逻辑 test 测试 util 工具类。例如:phpemailer .....
  6. templae 里面就一个class Job,通过config 目录下的配置文件。dequeue 和 business 方法
  7. 启动成功效果图:
  8. 基于Swoole Server 实现的Redis延时消息队列消费端
  9. 模拟用户下一笔订单,看下能否消费呢?
  10. 基于Swoole Server 实现的Redis延时消息队列消费端
  11. 基于Swoole Server 实现的Redis延时消息队列消费端
  12. 热更新演示: php serve.php reload PS: 不重启服务器,更新业务代码
  13. 基于Swoole Server 实现的Redis延时消息队列消费端
  14. 基于Swoole Server 实现的Redis延时消息队列消费端

 

  1. 消费成功,我们在测试下守护进程。通过修改config 目录下, daemonize => true 即可。
  2. 基于Swoole Server 实现的Redis延时消息队列消费端
  3. 基于Swoole Server 实现的Redis延时消息队列消费端
  4. 投递一笔订单,我们测试看下呢?-1 待支付状态 0 已取消
  5. 基于Swoole Server 实现的Redis延时消息队列消费端
  6. 基于Swoole Server 实现的Redis延时消息队列消费端
  7. 大概要演示的已经完毕了

 三、实现上述过程,需要下面的这些环境安装

  1,安装Redis MySQL 

  2,安装Swoole Seaslog 扩展,通过 pecl install swooleSeasLog 安装。添加到提醒的php.ini位置就好

  3,下载延时工具,下载位置:https://github.com/mix-basic/delayer/releases

         具体看文档实现,因为并不难。delay 文档地址https://github.com/mix-basic/delayer-client-php

   4,命令管理消费系统,通过 php serve.php reload | start  | stop 都已实现。

         基于Swoole Server 实现的Redis延时消息队列消费端

  5,有机会在在把多进程修改成,协程方式来实现吧!

   6,Git 代码:后面我在附加吧