消息需要延时最长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. 最好公有云能提供,因为我这小项目自己单独搞台服务器跑队列奢侈,和项目放一台服务器考验运维水准,也怕损坏。

:) wink
唐章明
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

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

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

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

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

2个月前 评论

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

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

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

2个月前 评论

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

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

2个月前 评论

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

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

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

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

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

1个月前 评论

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

Redis Stream

1个月前 评论

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

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!