消息需要延时最长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
唐章明
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 11

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

1周前 评论
打酱油的和尚 1周前

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

1周前 评论

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

1周前 评论
唐章明 (楼主) 1周前
cccdz 1周前
唐章明 (楼主) 1周前
TommyTu 1周前

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

1周前 评论

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

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

1周前 评论

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

4天前 评论

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