简介
目标: 使用PHP和Redis提供使用简单而功能强大的消息队列系统.
安装
目前内嵌到Chip框架, 也可以独立使用, 经过简单的修改可与其他核心模块完全解耦.
概述
使用说明
配置文件
在Chip里的conf目录下创建queue.ini, 根据自己的机器增加以下配置项:
创建队列
自定义配置创建
如果不想使用默认配置文件里的配置,可以自定义配置文件和配置索引
创建任务
创建任务是将一个消息写入一个有名字的管道, 下面管道名为”mytube”
创建延时任务
延时任务是在入队列后, 不会马上被处理进程获取, 在延迟指定时间后才会被处理.
创建定时任务
定时任务入队列后, 在特定时间点才会被处理进程获取并处理.
定时参数的格式遵循PHP的日期和时间格式 PHP date and time formats, 可以使用:
Next Monday
+1 days
last day of next month
2013-09-13 00:00:00
- and so on..
注意的是, 如果创建了一个过去时间的定时任务, 任务不会被丢弃, 而是会马上被触发.
创建周期任务
周期任务可以代替非具体时间的周期性的crontab.
创建失败重试任务
处理的时候如果处理失败后, 可以设定一个重试次数, 来重复尝试处理这个任务:
这个参数可以与上面的时间控制的参数一起使用.
设定处理时长TTR
每个消息任务都有规定的最大运行时间, 默认是5分钟, 超时后会被视为失败的任务.
可以在创建任务的时候指定处理最大时长:
这个参数可以与上面的时间控制的参数一起使用.
处理任务的时候, 如果时间过长, 也可以主动声明处理时间:
或者使用touch来重新计算处理时间:(参考处理任务)
处理任务
处理消息任务需要创建一个守护进程的脚本, 必须在CLI模式下执行, 这里可以使用Chip里的CLI-TASK:
任务状态调度控制
消息的状态有四种: 准备,订阅,延迟,失败, 这些状态的生命周期如下所示:
处理进程中的任务处在订阅状态(RESERVED), 一般处理完后会自动delete, 有异常的话会bury到失败队列.
开发者也可以主动delete,release,或者bury这个任务:
处理失败状态的任务:
并发模式
多数情况,消息队列保持”FIFO”(先进先出)的原则, 然而也有业务会用到分布式场景.
分布式处理消息会提高处理效率,为了避免因并发读取而出现的问题,需要将配置文件中distributed 设置为1
设计理念
利用Redis多种数据类型的特点,将每条队列构建成如下的数据结构:
每条任务会生成对应的Redis中Set、SortSet、Hash等数据类型用以流程控制:
简介
目标: 使用PHP和Redis提供使用简单而功能强大的消息队列系统.
安装
目前内嵌到Chip框架, 也可以独立使用, 经过简单的修改可与其他核心模块完全解耦.
概述
使用说明
配置文件
在Chip里的conf目录下创建queue.ini, 根据自己的机器增加以下配置项:
创建队列
自定义配置创建
如果不想使用默认配置文件里的配置,可以自定义配置文件和配置索引
创建任务
创建任务是将一个消息写入一个有名字的管道, 下面管道名为”mytube”
创建延时任务
延时任务是在入队列后, 不会马上被处理进程获取, 在延迟指定时间后才会被处理.
创建定时任务
定时任务入队列后, 在特定时间点才会被处理进程获取并处理.
定时参数的格式遵循PHP的日期和时间格式 PHP date and time formats, 可以使用:
Next Monday
+1 days
last day of next month
2013-09-13 00:00:00
- and so on..
注意的是, 如果创建了一个过去时间的定时任务, 任务不会被丢弃, 而是会马上被触发.
创建周期任务
周期任务可以代替非具体时间的周期性的crontab.
创建失败重试任务
处理的时候如果处理失败后, 可以设定一个重试次数, 来重复尝试处理这个任务:
这个参数可以与上面的时间控制的参数一起使用.
设定处理时长TTR
每个消息任务都有规定的最大运行时间, 默认是5分钟, 超时后会被视为失败的任务.
可以在创建任务的时候指定处理最大时长:
这个参数可以与上面的时间控制的参数一起使用.
处理任务的时候, 如果时间过长, 也可以主动声明处理时间:
或者使用touch来重新计算处理时间:(参考处理任务)
处理任务
处理消息任务需要创建一个守护进程的脚本, 必须在CLI模式下执行, 这里可以使用Chip里的CLI-TASK:
任务状态调度控制
消息的状态有四种: 准备,订阅,延迟,失败, 这些状态的生命周期如下所示:
处理进程中的任务处在订阅状态(RESERVED), 一般处理完后会自动delete, 有异常的话会bury到失败队列.
开发者也可以主动delete,release,或者bury这个任务:
处理失败状态的任务:
并发模式
多数情况,消息队列保持”FIFO”(先进先出)的原则, 然而也有业务会用到分布式场景.
分布式处理消息会提高处理效率,为了避免因并发读取而出现的问题,需要将配置文件中distributed 设置为1
设计理念
利用Redis多种数据类型的特点,将每条队列构建成如下的数据结构:
每条任务会生成对应的Redis中Set、SortSet、Hash等数据类型用以流程控制: