主流php队列拓展,THinkphp实现消息队列(think-queue)结合supervisor进程管理使队列进程常驻...

传统的程序执行流程一般是 即时|同步|串行的,在某些场景下,会存在并发低,吞吐量低,响应时间长等问题。在大型系统中,一般会引入消息队列的组件,将流程中部分任务抽离出来放入消息队列,并由专门的消费者作针对性的处理,从而降低系统耦合度,提高系统性能和可用性。

thinkphp-queue 是thinkphp 官方提供的一个消息队列服务,它支持消息队列的一些基本特性:

消息的发布,获取,执行,删除,重发,失败处理,延迟执行,超时控制等

队列的多队列, 内存限制 ,启动,停止,守护等

消息队列可降级为同步执行

thinkphp-queue 内置了 Redis,Database,Topthink ,Sync这四种驱动。

一、tp5.1的安装方法

用 composer 安装最新稳定版本

1a3ad0ebf8f73fa487368cd268b98351.png

二、添加think-queue扩展

composer安装

4d11f81380361ae784fe77b368df20b1.png

配置

配置文件位于项目根目录下的 config/queue.php,添加如下内容:

a969799b12ba4fa80972a975694e720d.png

我配置了redis驱动,大家可以根据自己的情况配置参数。

创建数据库表

创建一张表,用于展示消费队列写入数据库的操作。

ad9d43dd9e043cb5fcdaa9256e9635f6.png

创建消息队列任务

以index模块为例,创建一个 /app/index/job/Task.php 文件(job目录也是手动创建,一定要注意的是:TP5.1里面链接数据库一定要用model,否则将会不定期的出现MYSQL链接超时,将会导致supervisor的子进程卡死,自动重启也无效;原因是没能释放连接,也没有找到Db手动释放的方法),代码如下:

d92e1fd94e86d61ea6adc20f08066d8c.png

入队列(生产任务)

1). 有push()和later()两种方法,前者是立即执行,后者是延迟$delay秒后执行。

0c20dc33eb9d48f69f802f420064cbd6.png

2). 调用later()方法,将该任务分配到group1队列里,延迟10秒执行

008cf94a543c00dadaf31b7873725810.png

3). 调用之后,我们通过redis的远程管理工具会发现指定db库的队列里有对应的数据,说明完成了入队列

出队列(消费任务)

在项目根目录执行命令

66de1f6ae025e4fe249477c34ba05bad.png

之后(其中group1为队列名),数据库成功写入一条数据。接下来开始安装和配置supervisor来守护该进程不断的执行任务。

三、supervisor的安装和配置

1.yum安装supervisor

03d2246bf98700e9541e07cc56066a89.png

2.配置

1). 在这里我创建了一个命名为supervisor的目录用于存放supervisor和队列的日志文件以及include的配置文件,其目录结构为:

8004bcb25b3c2f2ea2363ff81acf9d98.png

2). 然后找到/etc/supervisord.conf配置文件,编辑如下信息:

a395de59fb970b22b371ab8475c774e0.png

3). 在/var/supervisor/conf目录里创建一个.conf文件,这里命名为queue_work.conf,内容如下:

8b78f1b400fa986032baf1d0ca702e17.png

对于index这个单模块而言,不同的业务逻辑为了区分可能会存在多个队列名,这种情况将多个队列名用逗号拼接起来:

92aff173e51b696333a958a395b8fda0.png

4.重启

d2243b0a4705c5ca3b526ff7028b325c.png

a014020f3148ea31d64f0961a5f42705.png

调用方法,成功写入数据库。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值