消息需要延时最长24小时,什么消息队列搭配PHP和laravel生态最佳?

我的系统消息有 30min-24h 的延时需求,精度要求在一分钟内,我想找一个对符合需求且对 laravel 生态友好的 MQ 来做这件事。

rabbitmq 可以死信或者加插件,不太希望用插件这种形式。
rocketmq 倒是特别合适,但是原生没有 php 客户端,阿里云商用版本倒是有,但是仅支持到 v4 版本,最新的 v5 没有提供,我担心阿里云更新升级后被断供。
腾讯云提供的 Pulsar 最多仅支持 3600 秒延时,且最多能维持 2 万条延时消息,不符合需求
aws sqs 内置在 laravel 中了,但是不太友好。
Beanstalkd 目前来看似乎符合需求,但是没有公有云提供,需要自己部署维护。

需求:
1. 必须支持延时 30min-24h,精度 1 分钟内。
2. 必须有 ACK 机制 不能丢消息,所以不能用 Redis。
3. 最好公有云能提供,因为我这小项目自己单独搞台服务器跑队列奢侈,和项目放一台服务器考验运维水准,也怕损坏。

:blush: wink
唐章明
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

阿里云。mns。完全满足。delay 范围是 0~604800 秒。最长 7 天。

2个月前 评论
唐章明 (楼主) 2个月前
cevin (作者) 2个月前
讨论数量: 19

Message::dispatch ($payload)->delay (now ()->addDays (2)); laravel 自带的 queue 就行

3个月前 评论
打酱油的和尚 3个月前

扔数据库不是很舒服吗 起一个每分钟的定时任务

3个月前 评论

利用 redis 做延时,到点触发然后扔给 mq, 这样可以避免使用 mq 插件实现延时队列。

3个月前 评论
唐章明 (楼主) 3个月前
cccdz 3个月前
唐章明 (楼主) 3个月前
TommyTu 3个月前

Redis 的确没有 ACK 机制,但是它有 lua 原子脚本,Laravel 已经用 lua 脚本去实现 ACK 机制了,当队列执行不正常的时候会有一个 queues:default:reserved 的 ZSET 去重试

3个月前 评论

比如订单拉取定时任务 我们是通过 redis 队列去跑 失败入数据库 然后重新跑 加最多次数

需要延时可以加任务时间 定时任务取入队 (腾讯云提供的 Pulsar)

3个月前 评论

阿里云。mns。完全满足。delay 范围是 0~604800 秒。最长 7 天。

2个月前 评论
唐章明 (楼主) 2个月前
cevin (作者) 2个月前

rabbitmq 的死信队列嘛,简单粗暴,不需要插件

2个月前 评论
AlienX 2个月前
mirhao (作者) 2个月前

可以使用数据库来处理,数据库压力不大的话

2个月前 评论

redis5.0 新增 stream,可以使用 stream 实现队列,stream 带有 ACK 机制。如果不着急,有成本考虑,可以试下。

Redis Stream

2个月前 评论

小项目,数据量不大的话定时任务最方便

2个月前 评论